首先给出Flask中文文档地址:http://docs.jinkan.org/docs/flask/
1 web开发基础:
前端开发:
html
css
JavaScript
MVC设计模式:
视图
控制器
模型
http:
基于请求相应模式
无状态
请求方法: GET, POST, DELETE,PUT
Flask应用的基本构成:
# coding=utf-8 from flask import Flask # 导入类 app = Flask(__name__) # 实例化Flask实例 @app.route('/') # 应用的路由部分,为下面的视图函数给出url def hello_world(): return 'Hello World!' if __name__ == '__main__': # 运行 app.run()
路由与反向路由flaskapp.py:
# coding=utf-8 from flask import Flask, request, url_for # 导入类 app = Flask(__name__) # 实例化Flask实例 @app.route('/') # 应用的路由部分,为下面的视图函数给出url def hello_world(): return 'Hello World!' @app.route('/user/<id>') # , methods=['POST']) def hello_user(id): return 'Hello user!' + id @app.route('/query_user') # 访问:http://127.0.0.1:5000/query_user?id=2 def query_user(): id = request.args.get('id') return 'query_user' + id # 反向路由 @app.route('/query_url') # http://127.0.0.1:5000/query_url 显示为:query url/query_user def query_url(): return 'query url' + url_for('query_user') if __name__ == '__main__': # 运行 app.run()
flash模板:
找到Jinja2一个Python的模板引擎: https://github.com/mitsuhiko
访问http://jinja.pocoo.org/
flack渲染:
创建index.html文件:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>{{ content }}</h1> </body> </html>
在flaskapp.py中添加:
@app.route('/') # 应用的路由部分,为下面的视图函数给出url def hello_world(): content = "Hello world" return render_template("index.html", content=content)
如果传入的是复杂的对象:
models.py
class User(object): def __init__(self, user_id, user_name): self.user_id = user_id self.user_name = user_name
user_index.html:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>hello {{ user.user_name }}</h1> </body> </html>
设置路由:
@app.route('/user') def user_index(): user = User(1, 'thystar') return render_template("user_index.html", user=user)
模板中的条件语句:
def q_user(user_id): user = None if int(user_id) == 1: user = User(1, 'thystar') return render_template("user_id.html", user=user)
user_id.html
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> {% if user %} hello {{ user.user_name }} {% else %} no this user {% endif %} </body> </html>
异常处理:
@app.errorhandler(404) def not_found(e): return render_template("404.html")
404.HTML:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>该页面不存在</h1> </body> </html>
另一种方式是:
@app.route('/user/<id>') # , methods=['POST']) def hello_user(id): if int(id) == 1: return render_template("index.html") else: abort(404)
最后,提一下模板的继承:
在有些情况下,网页切换时,有些页面是不发生改变的,如导航栏,因此,为了避免代码重复,使用继承:不变的部分在父类中实现,变化的部分在子类中实现
首先,定义基类 base.html:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div> <h1>Hello World</h1> </div> <!--中间变化的部分定义在block中--> {% block content %} {% endblock %} <div> <h1>Thanks</h1> </div> </body> </html>
然后定义两个子类 ont_base.html 和 two_base.html
<!--继承基类--> {% extends "base.html" %} {% block content %} <h2>thystar</h2> {% endblock %}
<!--继承基类--> {% extends "base.html" %} {% block content %} <h2>THYSTAR</h2> {% endblock %}
在flaskapp.py中添加:
@app.route('/one') def one_base(): return render_template("one_base.html") @app.route('/two') def two_base(): return render_template("two_base.html")
打开浏览器测试:http://127.0.0.1:5000/two
极客学院:http://www.jikexueyuan.com/course/943_3.html?ss=1