政务服务平台开发需要注意如何提升小程序跨平台兼容性与用户体验
655
2022-09-12
Flask基础之session验证与模板渲染语法(jinja2)
1.http传输请求头参数
request.headres 之 请求头中数据显示:
print(type(request.headers))
"""
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1:5000/home
Content-Type: application/x-www-form-urlencoded
Content-Length: 26
Cookie: csrftoken=vDIozqveCEfArdYXlM6goHVlSQEn7h4bDygNphL2Feas60DiM2di0jlqKfxo7xhA
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
"""
2.Flask中request.data参数处理
request.data 之 如果处理不了的就变成字符串儿存在data里面
request 是基于 mimetype 进行处理的
mimetype的类型 以及 字符串儿 : http://w3school.com-/media/media_mimeref.asp
如果不属于上述类型的描述,request就会将无法处理的参数转为json存入到 data 中
其实我们可以将 request.data , json.loads 同样可以拿到里面的参数
其他request参数:
request.获取各种路径之这些方法没必要记,但是要知道它存在
# 获取当前的url路径
print(request.path)# /req
# 当前url路径的上一级路径
print(request.script_root) #
# 当前url的全部路径
print(request.url) # http://127.0.0.1:5000/req
# 当前url的路径的上一级全部路径
print(request.url_root ) # http://127.0.0.1:5000/
3.Flask中request.json参数
request.json 数据在提交数据时,需要指定参数的格式是json格式
如果在请求中写入了 "application/json" 使用 request.json 则返回json解析数据, 否则返回 None
4.Flask中的session管理
Flask中的session是flask自带的模块
session生成机制:先创建一个字典,再secret_key + 时间戳 + flask内置签名 加密 形成
secret_key :可以任意指定一个加密字符串
时间戳:保存session的过期时间
签名:内置签名,应用于session加密
实例:
from datetime import timedelta
from flask import Flask, session, request, render_template, redirect
app = Flask(__name__)
# 随机创建一个session的key
app.secret_key = "#$%^&*#$%^$%2213123^&"
# 调试模式
app.debug = True
# 更改session的名字
app.session_cookie_name = "I am Not Session"
# 设置session的过期时间,15秒
# app.permanent_session_lifetime = 15
@app.route("/login", methods=["POST", "GET"])
def login():
if request.method == "GET":
return render_template("login.html")
else:
uname = request.form.get("username")
pwd = request.form.get("pwd")
if uname == "123" and pwd == "123":
# 设置session
session["username"] = uname
return "200 OK"
else:
return "登录失败!"
@app.route("/detail")
def detail():
# 验证session设置是否成功
if session.get("username"):
return render_template("index.html")
else:
return redirect("/login")
if __name__ == '__main__':
app.run("0.0.0.0", 9527)
HTML文件:
...
用户名:
密码:
...
5.Flask中模板语法(if,for语法数据处理)
falsk模板语法是基于jinja2语法实现
from flask import Flask, render_template
STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}
STUDENT_LIST = [
{'name': 'Old', 'age': 38, 'gender': '中'},
{'name': 'Boy', 'age': 73, 'gender': '男'},
{'name': 'EDU', 'age': 84, 'gender': '女'}
]
STUDENT_DICT = {
1: {'name': 'Old', 'age': 38, 'gender': '中'},
2: {'name': 'Boy', 'age': 73, 'gender': '男'},
3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}
app = Flask(__name__)
app.debug = True
@app.route("/index")
def index():
return render_template("index1.html",
stu_info=STUDENT,
stu_list=STUDENT_LIST,
sd=STUDENT_DICT)
if __name__ == '__main__':
# 定义访问ip与port
app.run("0.0.0.0", 9527)
HTML文件:
{# 普通字典数据处理 #}
{{ stu_info }}
{# 列表中嵌套字典数据的处理 #}
{{ stu_list }}
{% for foo in stu_list %}
{% if foo.gender != "男" and foo.gender != "女" %}
{% else %}
{% endif %}
{% endfor %}
{# 字典数据类型处理 #}
{{ sd }}
{% for k,v in sd.items() %}
{% endfor %}
6.Flask中模板语法(自定义函数方法)
通过定义全局变量的方法,不需要导入则可以直接在模板中使用:
from flask import Flask, render_template #装饰自定义方法
app = Flask(__name__)
app.debug = True
# 自定义方法,这里装饰的函数是一个全局变量
@app.template_global()
def ab(a, b):
return a + b
@app.template_filter() # 定义全局模板函数
def a_b_c_sum(a, b, c):
return a + b + c
@app.route("/index")
def index():
return render_template("index1.html")
if __name__ == '__main__':
# 定义访问ip与port
app.run("0.0.0.0", 9527)
HTML文件:输出结果3
...
输出结果:{{ ab(1,2) }}
{{ 1 | a_b_c_sum(197,2) }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~