flask复习笔记(简略版)
自己学着玩写的笔记,东西不全
可供有一点Python和web基础的同学快速入门或者复习用
部分代码来自菜鸟教程https://www.cainiaojc.com/flask/flask-tutorial.html
我只是总结概括了一下,感谢原作者
flask简介
Flask是轻量级Python Web 应用框架,基于Werkzeug WSGI工具包和Jinja2模板引擎。通常被称为微框架,它旨在保持应用程序的核心简单且可扩展。
一些配置问题
先得安装下Flask,pip会自动安装相关的其他包
flask项目的格式
# 导包
from flask import Flask
# 创建Flask对象
app = Flask(__name__)
# 路由装饰器
@app.route('/')
def hello_world():
return 'Hello World'
#下面是两个带参数的url
@app.route('/hello/<name>')
def hello_name(name):
return 'Hello %s!' % name
@app.route('/blog/<int:postID>')
def show_blog(postID):
return 'Blog Number %d' % postID
# 启动从这里开始,参数还有个option不过现在没啥用
if __name__ == '__main__':
app.run(host='127.0.0.1', port='5000', debug=True)
url_for 的使用
@app.route('/guest/<guest>')
def hello_guest(guest):
return 'Hello %s as Guest' % guest
@app.route('/user/<name>')
def user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest',guest = name))
#注意第一个参数'hello_guest'是函数名,后面的guest=name是url后缀参数
在html中使用:
<a href = "{{ url_for('login') }}">
渲染_模板 render_template模块
它可以利用Jinja2模板引擎技术,而不需要从函数返回硬编码HTML。如下代码所示,可以通过render_template()函数渲染HTML文件。
注意html文件要放在/templates文件夹下面
#这两个是一样的,一般用后者啦
@app.route('/hello')
def index():
return '<html><body><h1> Hello World </h1></body></html>'
@app.route('/hello.html')
def index():
return render_template('hello.html')
Jinja2模板引擎使用以下分隔符来从HTML转义。
{% … %} 用于多行语句
{{ … }} 用于将表达式打印输出到模板
{# … #} 用于未包含在模板输出中的注释
render_template可以向html中传递参数:
@app.route('/hello/<int:score>')
def hello_name(score):
return render_template('hello.html', marks = score)
{% if marks>50 %}
<h1> 通过考试!</h1>
{% else %}
<h1>未通过考试!</h1>
{% endif %}
传输字典并使用for循环打印:
@app.route('/result')
def result():
dict = {'phy':59,'che':60,'maths':90}
return render_template('result.html', result = dict)
<table border = 1>
<-->注意item后面的括号!!</-->
{% for key, value in result.items() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
表单处理
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def student():
return render_template('student.html')
@app.route('/result',methods = ['POST', 'GET'])
def result():
if request.method == 'POST':
result = request.form
return render_template("result.html",result = result)
if __name__ == '__main__':
app.run(debug = True)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask示例</title>
</head>
<body>
<form action = "http://localhost:5000/result" method = "POST">
<p>姓名 <input type = "text" name = "Name" /></p>
<p>物理分数: <input type = "text" name = "Physics" /></p>
<p>化学分数: <input type = "text" name = "Chemistry" /></p>
<p>数学分数: <input type ="text" name = "Mathematics" /></p>
<p><input type = "submit" value = "提交" /></p>
</form>
</body>
</html>
result.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask示例</title>
</head>
<body>
<table border = 1>
{% for key, value in result.items() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
</body>
</html>
cookie和session
cookie:
from flask import make_response,request,render_template,Flask
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/setcookie', methods = ['POST', 'GET'])
def setcookie():
if request.method == 'POST':
user = request.form['name']
resp = make_response(render_template('readcookie.html'))
resp.set_cookie('userID', user)
return resp
@app.route('/getcookie')
def getcookie():
name = request.cookies.get('userID')
print (name)
return '<h1>welcome, '+name+'</h1>'
if __name__ == '__main__':
app.run(debug = True)
session:使用session登录
from flask import *
app = Flask(__name__)
#这个secret_key一定要有,但是目前不知道有什么用
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
@app.route('/')
def index():
if 'username' in session:
username = session['username']
return '登录用户名是:' + username + '<br>' + \
"<b><a href = '/logout'>点击这里注销</a></b>"
return "您暂未登录, <br><a href = '/login'></b>" + \
"点击这里登录</b></a>"
#登录
@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form action = "" method = "post">
<p><input type ="text" name ="username"/></p>
<p><input type ="submit" value ="登录"/></p>
</form>
'''
#退出登录
@app.route('/logout')
def logout():
# remove the username from the session if it is there
session.pop('username', None)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug = True)
重定向
#还是注意success是函数名
return redirect(url_for('success'))
闪现机制
#只有执行到这个的时候才会被传送到前端,可以写很多条
#注意是在跳转之前flash
flash('您已成功登录')
flash('You were successfully logged in')
return redirect(url_for('index'))
<-->对应的html代码块</-->
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}