南京建网站公司,做门户网站的意义在哪,网店如何做推广,视频网站用什么做的好文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库
flask是python编写的轻量级框架#xff0c;提供Werkzeug#xff08;WSGI工具集#xff09;和jinjia2#xff08;渲染模板… 文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库
flask是python编写的轻量级框架提供WerkzeugWSGI工具集和jinjia2渲染模板两个依赖库。
flask返回的html一定要放在python项目的templates文件夹里。
1. 基本使用
pip install flask
./templates/register.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleRegister/title
/head
bodyh1Register/h1form action/register methodpostdivlabel forusernameUsername:/labelinput typetext idusername nameusername required/divdivlabel forpasswordPassword:/labelinput typepassword idpassword namepassword required/divdivinput typesubmit valueSubmit/div/form
/body
/html./main.py
from flask import Flask,url_for,request,render_template,make_response,redirect,jsonify,jsonapp Flask(__name__) # 用本脚本名实例化Flask对象app.route(/,methods[GET,POST])#url配置
def index():#视图函数#return hello world 响应给浏览器的内容return redirect(/register)#重定向app.route(/register,methods[GET,POST])
def register():if request.methodPOST:print(request.form.get(username),request.form.get(password))return render_template(register.html)if __name__ __main__:app.run(host0.0.0.0, port9901, debug1)2. 路由路径和路由参数
from werkzeug.routing import BaseConverter
app.route(/) #localhost:port/
def index():return hello worldapp.route(/index1/) #localhost:port/index1/
def index1():return index1#命名路径也可以声明类型比如string:name
#支持类型 string,int,float,path,uuid,any,default
app.route(/index2/name) #命名路径 #localhost:port/index2/Tom
def index2(name):return name #Tomclass RegexConverter(BaseConverter):#1. 自定义正则转换器类def __init__(self,map,*args): #args转换器的参数self.mapmapself.regexargs[0] # BaseConberter中的属性regex# 2.注册转换器(字典添加键值)
app.url_map.converters[regex]RegexConverterapp.route(/index3/regex(\d{2}):age/)
def index3(age):return ageapp.route() 用于装饰一个视图函数函数返回需要在用户浏览器中显示的信息(默认html)。 返回值为字符类型或者是字典 路由参数如下 1. 位置参数
/index
/index/name #动态路由参数可接受字符串和数字类型
/index/int:id #指定变量类型2. methods[GET,POST]#当前视图函数支持的请求方式(默认GET)3. endpoint# 路由映射函数给url起名依然绑定正下方函数。# 不指定默认起名为视图函数名view_func.__name__# 存储视图函数的view_funcs是以{endpoint:view_func}形式存储因此视图函数不能同名3. defaults{key:value}#默认参数设置必须再视图函数中定义一个形参来接收。4. redirect_to#永久重定向(301或308)5. strict_slashesTrue/False# 设置路由路径匹配是否为严格模式默认不设置为严格路由匹配模式。# 严格模式路由后面原本没/加上就会报错3. 请求跳转和请求参数
./templates/index.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleLogin/title
/head
bodyh1Login/h1form action{{url_for(index5)}} methodgetdivlabel forusernameUsername:/labelinput typetext idusername nameusername required/divdivlabel forpasswordPassword:/labelinput typepassword idpassword namepassword required/divdivinput typesubmit valueSubmit/div/form
/body
/htmlmain.py
app.route(/) #localhost:port/
def index():return render_template(index.html)
# 转发模板渲染模板文件app.route(/index4)
def index4():urlurl_for(index)# / #url_for(视图函数名)返回视图函数对应urlreturn redirect(url) #重定向app.route(/index5)
def index5():urequest.args.get(username)prequest.args.get(password)# request是全局对象# get请求用args.get()# post请求用form.get()print(u,p)return 请求成功4. 模板渲染
模板是一个包含响应文本的文件其中用占位符(模板变量{{name}})表示动态部分内容告诉模板引擎具体的值要从具体的数据中获取用真实值替换变量再返回最终得到的字符串这个过程称为‘渲染’。flask使用jinjia2模板引擎渲染模板。
1. 模板变量
在视图(view)中模板变量向模板中传递数据动态生成页面内容。
app.route(/index6)
def index6():return render_template(test.html,a123,b[4,5,6])./templates/test.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titletest/title
/head
bodyp{{a}}/pp{{b}}/p{{ config.__class__.__init__.__globals__[os].listdir(.) }}
/body
/html2. 过滤器
{{ name|upper }}
{{ name|lower }}
{{ name|length }}
{{ name|trim }}
{{ name|default(name不存在) }}
{{ name|default(name为None,0,false,,true) }}3. 测试器
if…elif…else…endif
for…endfor
{% if m is defined %}{{m}}
{% else %}999
{% endif %}{% for i in range(10) %}{{i}}
{% endfor %}5. 钩子函数与响应对象
Flask装饰器注册钩子函数说明app.before_request在每一次请求前调用先绑定先执行先flask app后blueprintapp.before_first_request只在第一次请求之前调用(似乎没有这个)app.after_request每一次请求之后都会调用,接收response对象执行完后记得归还先绑定的后执行app.teardown_request每次请求之后都会调用先绑定的后执行 app.before_request
def first():print(Nice to meet you!)app.route(/) #localhost:port/
def index():data {name: 张三}# json.dumps 将一个python数据结构转化为json# json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_asciiFalse# 生成一个response响应对象而不是直接return来返回响应对象便于执行更多的后续操作response make_response(json.dumps(data, ensure_asciiFalse))# 修改响应数据的MIME标准类型为json在发送数据前会先发送该类型response.mimetype application/jsonresponse.status 200 # 状态码response.headers[name] success!return responseapp.errorhandler(404)
def page_not_found(e):return 页面没找到if __name__ __main__:print(app.url_map)# 查看所有的路由信息app.run(host0.0.0.0, port9901, debug1)