一.route()装饰器吧一个函数绑定到对应的URL上。
#manage.py
from demo01 import app
app.debug=True
if __name__ == '__main__':
app.run()
二.在URL中传递参数:
要在url 中传递参数,你可以把这些参数标记为<varible_name>。这个部分作为名命参数传递到你的函数。
规则可以用<conver:varible.name>制定一个可选的转换器。
(注意:)生成secret_key:
import os
os.urandom(24)
@app.route('/usr/<username>')
def show_user_profile(username)
return 'User %s ' %username
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %s ' %post_id
| |||||||||||||
@app.route('/usr/<username>')
def show_user_profile(username)
三.通过视图函数获得url
1.使用url_for(视图名称)函数
from flask import Flask,url_for
app=Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/user/<username>')
def get_user(username):
return '用户名称:{0}'.format(username)
@app.route('/login')
def login():
return 'login'
@app.route('/test')
def test():
html = """
<a href='{0}'>index</a></br>
<a href='{1}'>login</a></br>
<a href='{2}'>user</a></br>
"""
result=html.format(url_for('index'),url_for('login'),url_for('get_user',username='tom'))
return result
四.模板渲染和静态文件
1.模板渲染(jinja2)
render_template
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
l=['享学课堂','python','老郭']
return render_template('index.html',ctx=l)
2.静态文件
url_for('static',filename='style.css')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>享学课堂</title>
<link rel="stylesheet" href="{{url_for('static',filename='style.css')}}">
</head>
<body>
<p>享学课堂</p>
<ul>
{%for item in ctx%}
<ol>{{item}}</ol>
{%endfor%}
</ul>
</body>
</html>
style.css
p{
font-size:20px;
color:red;
}
五、http方法
1.默认情况下,路由只回应GET请求
from flask import Flask,request,render_template
app=Flask(__name__)
def index():
pass
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'POST':
return '登录成功'
else:
return render_template('login.html')
2.可以通过route()装饰器来method来改变这一行为。
<h1>Login!</h1>
<form action="/login" method="post">
Username:<input type="text" name="username" value="">
<input type="submit" name="" value="Login">
</form>
六、访问请求request数据
1.Form表单数据
request.form['username]
2.url地址参数
searchword = request.args.get('key','')
from flask import Flask,request,render_template
app=Flask(__name__)
@app.route('/login',methods=['POST','GET'])
def login():
if request.method=='POST':
username= request.form['username']
return 'welcome ,{0}'.format(username)
else:
return render_template('login.html')
@app.route('/test')
def test():
a = request.args.get('arg','')
return '{0}'.format(a)
浏览器访问/test?arg=test
返回结果为test
八、文件上传
1.获得对象
f = request.files['the_file']
2.保存文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>享学课堂</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
file:<input type="file" name="upload" value="">
<input type="submit" name="" value="上传">
</form>
</body>
</html>
from flask import Flask,request,render_template
app=Flask(__name__)
@app.route('/upload',methods=['GET','POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
f.save('uploads/demo1.txt')
return '上传成功'
else:
return render_template('upload.html')
九、cookie
1.设置cookie
resp = make_response(render_template(...))
resp.set_cookie.get('username')
2.读取cookie
username = request.cookies.get('username')
from flask import Flask,request,make_response
app=Flask(__name__)
@app.route('/set')
def set():
res = make_response('设置成功')
res.set_cookie('username','liuyuan')
return res
@app.route('/get')
def get():
name = request.cookies.get('username')
return name
十、请求重定向和错误处理
1.重定向
可以用redirect()函数吧用户重定向到其他地方。
@app.route('/index')
def index():
return redirect(url_for('login'))
2.放弃请求
用abort(404)函数
@app.route('/login')
def login():
abort(404)
3.定制错误页面
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'),404
十一、session
1.request和session的区别
2.它是在Cookies的基础上实现的,并且对cookies进行秘钥签名。
from flask import Flask,request,session,redirect,url_for,render_template
app=Flask(__name__)
app.secret_key = '\xbbD1\xcb\x1878\xd2 Liu\x83CF\xb4\xfa\x8d\x9a6\xc4\x9eP\xf5'
@app.route('/index')
def index():
if 'username' in session:
return 'welcome,{0}'.format(session['username'])
else:
return '您还没有登录'
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'POST':
username = request.form['username']
session['username'] = username
return redirect(url_for('index'))
else:
return render_template('login.html')
@app.route('/logout')
def logout():
session.pop('username',None)
return redirect(url_for('index'))