Django 和 Flask对照
常用方法包
from flask import Flask,render_template,flash,request,abort
g 和session
session 是可以跨 request 使用的,session 的数据是经过加密后存储在 cookie 里的,用户每次 request 都会把这些 cookie 信息发回来,从而实现跨 request 使用。
g 是面向单个 request 的,一个 request 处理完,g 里的东西就没啦。(注意,这里说的 request 不是指 request context,从 0.10 版本开始,g 已经是面向 app context 了。这里写面向单个 request 是为了帮助提问者理解问题中提到的区别,仅考虑在 web 下的场景。)
hello world
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
if __name__ == '__main__':
app.run(port=8080) //运行端口
请求类型和参数传递
方式一:
@app.route('/hello/<id>',methods = ['GET'])
def hello_world(id):
return 'hello:'+id
方式二:
http://127.0.0.1:5000/hello?id=1
from flask import Flask,request
@app.route('/hello')
def hello_world():
id = request.args.get('id')
return 'hello:'+id
反向路由
from flask import Flask,request,url_for
@app.route('/test')
def query_user():
''' http://127.0.0.1:5000/test?id=123 '''
id = request.args.get('id')
return 'query user:'+id
@app.route('/query_url')
def query_url():
''' 反导出 query_user函数名对应的url地址 '''
return 'query url:'+url_for('query_user')
模板base
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 必须放在templates文件夹下
<body>
//正常获取
<h1>hello {{user.user_name}}</h1>
//条件判断
{% if user %}
hello {{user.user_name}}
{% else %}
no this user
{% endif %}
//循环
{% for user in users%}
{{user.user_name}}
{% endfor %}
</body>
主程序
@app.route('/user')
def user_inde():
user = User(1,'jike')
return render_template('user_index.html', user=user)
模板的继承
base.html
<div>
<h1>Heard jinke</h1>
</div>
{% block content %} //预定可变的内容
{% endblock %}
<div>
<h1>footer jinke</h1>
</div>
one_base.html
{% extends "base.html"%}
{% block content %}
<h2> extend 1</h2> //具体内容1
{% endblock %}
two_base.html
{% extends "base.html"%}
{% block content %}
<h2> extend 2</h2> //具体内容二
{% endblock %}
消息提示
主程序:
app.secret_key = '123'
@app.route('/')
def index():
flash('this is message')
return render_template('index.html')
index.html
<body>
{{get_flashed_messages()[0]}}
</body>
处理404等异常
@app.errorhandler(404)
def not_found(e):
return render_template('404.html')
抛出异常:
from flask import Flask,render_template,flash,request,abort
@app.route('/thow404')
def thow404():
abort(404) //抛出异常
实现加法计算
<div align="center" style="margin-top:40px">
<img src="{{url_for('static',filename='add.png')}}"><br>
</div>
<div align="center" style="margin-top:60px">
<form name="form1" method='POST'>
<input type="text" placeholder="加数" name="adder1" class="form-control" value="{{adder1}}">
+
<input type="text" placeholder="被加数" name="adder2" class="form-control" value="{{adder2}}">
=
<input type="text" placeholder="总数" name="sum" readonly="readonly" class="form-control" value="{{message}}">
<input type="submit" class="btn btn-lg btn-info" value="计算">
</form>
</div>
index.py
from flask import Flask,render_template,redirect,url_for,request
app=Flask(__name__)
@app.route('/')
def index():
return redirect(url_for('add'))
@app.route('/add',methods=['GET','POST'])
def add():
if request.method =="POST":
a=request.form['adder1']
b=request.form['adder2']
a=int(a)
b=int(b)
sum=a+b
return render_template('index.html',adder1=str(a),adder2=str(b),message=str(sum))
return render_template('index.html')
if __name__=='__main__':
app.run(port=8080)
Flask-wtf表单生成
main.py
from flask import Flask,request,render_template,redirect
from wtforms import Form,TextField,PasswordField,validators
app=Flask(__name__)
class LoginForm(Form):
username = TextField("username",[validators.Required()])
password = PasswordField("password",[validators.Required()])
@app.route("/user",methods=['GET','POST'])
def login():
myForm = LoginForm(request.form)
if request.method=='POST':
if myForm.username.data=="jikexueyuan" and myForm.password.data=="123456" and myForm.validate():
return redirect("http://www.jikexueyuan.com")
else:
message="Login Failed"
return render_template('index.html',message=message,form=myForm)
return render_template('index.html',form=myForm)
if __name__=="__main__":
app.run(port=8080)
templates/index.html
<h1>User Management</h1>
{% if message %} {{message}} {% endif %}
<form method="post">
Username :{{form.username}}
<br/>
Password :{{form.password}}
<br/>
<input type="submit" value="Submit" />
<input type="reset" value="reset" />
</form>