标签:python flask
首先给出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
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
标签:python flask
原文地址:http://4440271.blog.51cto.com/4430271/1663687