内容:
1.基础的flask框架示例
2.flask配置文件
3.flask路由系统
4.请求和响应
5.模板
flask框架预备知识:https://www.cnblogs.com/wyb666/p/9460598.html
flask框架详细学习:http://www.cnblogs.com/wupeiqi/articles/7552008.html
1.基础的flask框架示例
(1)基础flask框架示例程序结构
其中app.py是主程序,utils.py是功能函数模块(log),templates文件夹中是HTML文件
(2)代码
程序功能:访问'/'显示欢迎信息和链接,访问'/message'显示留言板,然后可以用get提交数据,post提交数据,post提交的数据最后将显示在页面上
app.py:
1 from flask import ( 2 Flask, 3 render_template, 4 request, 5 redirect, 6 url_for, 7 ) 8 from utils import log 9 10 11 # 先要初始化一个 Flask 实例 12 app = Flask(__name__) 13 14 # message_list 用来存储所有的 message 15 message_list = [] 16 17 18 # 定义路由和路由处理函数的方式如下 19 # ========================== 20 # 用 app.route 函数定义路由,参数是一个 path 路径 21 # 下一行紧跟着的函数是处理这个请求的函数 22 # @ 是一个叫装饰器的东西, 现在无必要知道具体的原理, 只要用它就好了 23 # 注意 methods 参数是一个 list,它规定了这个函数能接受的 HTTP 方法 默认是GET 24 @app.route('/', methods=['GET']) 25 def hello_world(): 26 return '<h1>Hello wyb666</h1><br><a href="/message">message</a>' 27 28 29 @app.route('/message') 30 def message_view(): 31 log('请求方法', request.method) 32 # render_template 读取并返回 templates 文件夹中的模板文件 33 # messages 是传给模板的参数,这样就能在模板中使用这个变量 34 return render_template('message_index.html', messages=message_list) 35 36 37 # 这个路由函数只支持 POST 方法 38 @app.route('/message/add', methods=['POST']) 39 def message_add(): 40 log('message_add 请求方法', request.method) 41 42 # 把POST请求的数据生成一个 dict 存到 message_list 中去 43 msg = { 44 'content': request.form.get('msg_post', ''), 45 } 46 message_list.append(msg) 47 48 # 重定向: 49 return redirect('/message') 50 # 一般来说,我们会用 url_for 生成路由 注意url_for的参数是路由函数的名字(格式为字符串) 51 # return redirect(url_for('message_view')) 52 53 54 # 运行服务器 55 if __name__ == '__main__': 56 config = dict( 57 debug=True, # debug 模式可以自动加载你对代码的变动, 所以不用重启程序 58 host='localhost', # 指定域名 59 port=80, # 指定端口 60 ) 61 app.run(**config)
utils.py:
1 # 一些工具函数 2 import time 3 4 5 # 用 log 函数把所有输出写入到屏幕中 方便debug 6 def log(*args, **kwargs): 7 formats = '%Y/%m/%d %H:%M:%S' 8 value = time.localtime(int(time.time())) 9 dt = time.strftime(formats, value) 10 print(dt, *args, **kwargs)
message_index.html:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <!-- 指明字符编码为 utf-8 否则中文会乱码 --> 5 <meta charset="utf-8"> 6 <title>留言板</title> 7 </head> 8 <body> 9 <h1>留言板</h1> 10 <form action="/message" method="GET"> 11 这是一个发送 GET 请求的表单 12 <br> 13 <textarea name="msg"></textarea> 14 <br> 15 <button type="submit">用 GET 提交表单</button> 16 </form> 17 18 <form action="/message/add" method="POST"> 19 这是一个发送 POST 请求的表单 20 <br> 21 <textarea name="msg_post"></textarea> 22 <br> 23 <button type="submit">用 POST 提交表单</button> 24 </form> 25 <!-- 下面是使用模板的办法 --> 26 {# 这是 Jinja2 模板的注释语法,这样的注释并不会在生成的 HTML 代码中出现 #} 27 {# {% %} 里面的是语句 #} 28 {# {{ }} 里面的是引用变量 #} 29 <!-- 注意 m 本身是一个字典,但是你可以用 . 的语法来引用 --> 30 <!-- 这是 Jinja2 模板的功能 --> 31 {% for m in messages %} 32 <div>{{ m.content }}</div> 33 {% endfor %} 34 </body> 35 </html>
2.flask配置文件
(1)flask默认配置如下:
1 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: 2 { 3 'DEBUG': get_debug_flag(default=False), # 是否开启Debug模式 4 'TESTING': False, # 是否开启测试模式 5 'PROPAGATE_EXCEPTIONS': None, 6 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 7 'SECRET_KEY': None, 8 'PERMANENT_SESSION_LIFETIME': timedelta(days=31), 9 'USE_X_SENDFILE': False, 10 'LOGGER_NAME': None, 11 'LOGGER_HANDLER_POLICY': 'always', 12 'SERVER_NAME': None, 13 'APPLICATION_ROOT': None, 14 'SESSION_COOKIE_NAME': 'session', 15 'SESSION_COOKIE_DOMAIN': None, 16 'SESSION_COOKIE_PATH': None, 17 'SESSION_COOKIE_HTTPONLY': True, 18 'SESSION_COOKIE_SECURE': False, 19 'SESSION_REFRESH_EACH_REQUEST': True, 20 'MAX_CONTENT_LENGTH': None, 21 'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12), 22 'TRAP_BAD_REQUEST_ERRORS': False, 23 'TRAP_HTTP_EXCEPTIONS': False, 24 'EXPLAIN_TEMPLATE_LOADING': False, 25 'PREFERRED_URL_SCHEME': 'http', 26 'JSON_AS_ASCII': True, 27 'JSON_SORT_KEYS': True, 28 'JSONIFY_PRETTYPRINT_REGULAR': True, 29 'JSONIFY_MIMETYPE': 'application/json', 30 'TEMPLATES_AUTO_RELOAD': None, 31 }