Flask学习笔记总结(⼀)
Flask学习笔记总结(⼀)
说明:开始在csdn上⾯记录⼀些关于⾃⼰学习技术的笔记总结。
⽂章⽬录
前⾔
在IT⾏业中是需要不断去学习和拓展⾃⼰的知识⾯的,只有不断接触新知识才能不断提⾼⾃⼰的能⼒和价值,我相信没有知识是⽩学的,希望⾃⼰能成为⼀个好的程序员。
提⽰:个⼈学习随笔,⾃⼰记录使⽤,仅供参考
⼀、python的web三⼤框架
1.Django:重武器 组件超多 便捷 例 ORM FORM modelform 缓存 session
2. Flask: 短⼩精悍 第三⽅组件较为丰富 开发⼩的⽤flask,路由较为特殊:基于装饰器实现,但究其本质还是
通过add_url_rule来实现
.conf 为配置⽂件
3. Tornado:异步⾮阻塞框架(node.js) 1线程跑 1000个任务
⼆、flask⼊门
1.wsgi
对于Werkzeug本质是Socket服务端,其⽤于接收http请求并对请求进⾏预处理,然后触发Flask框架本质
Werkzeug⽰例:
代码如下:
from werkzeug.wrappers import Request, Response
@Request.application
def hello(request):
return Response('Hello World!')
if __name__ =='__main__':
from werkzeug.serving import run_simple
run_simple('localhost',4000, hello) # 看到run_simple代表socket执⾏监听端⼝
2.Flask
代码如下(⽰例):
from flask import Flask
#实例化flask对象
app =Flask(__name__)
###将'/'和 index的对应关系添加到路由器中
"""
{
'/':index
}
"""
@ute('/') #装饰器两步相当于先执⾏ ute('/')再执⾏  v()
#
def hello_world():
return'Hello World!'
if __name__ =='__main__':
# 监听⽤户请求
#如果有请求则执⾏app的__call__⽅法
app.run() #运⾏等待连接与run_simple有关联
3.⽤户demo
1.登录界⾯(主程序)
代码如下(⽰例):
from flask import Flask,render_template,request,redirect
#render_template是表⽰页⾯模板 request请求相关全放⼊⾥⾯
# 实例化flask对象
app =Flask(__name__)
@ute('/login',methods=['GET',"POST"])  # 装饰器两步相当于先执⾏ ute('/')再执⾏  v()
def index():
hod =="GET":
return render_template('login.html')
else:
user = ('user')
pwd = ('pwd')
if user =='lixuan' and pwd =='123':
return redirect('www.baidu')
return render_template('login.html',error='⽤户名或密码错误')
# url的所有数据都在query_string内
if __name__ =='__main__':
# 监听⽤户请求
# 如果有请求则执⾏app的__call__⽅法
app.run()  # 运⾏等待连接与run_simple有关联
2.⽹页程序(login.html)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>⽤户登录</h1>
<form method="post">
<input type="text"  name="user">
<input type="text"  name="pwd">
<input type="submit"  value="登录">{{error}}
</form>
</body>
</html>
3.⽤户列表展⽰
装饰器:⽤户认证
装饰器demo代码如下:
def wrapper(func)
def inner(*arg,**kwargs)
return func(*arg,**kwargs)
return inner
@wrapper  #执⾏wrapper并将下⾯当参数 index=wrapper(index)
def index(request):
pass
登录函数内:session[‘user_info’] = user
外函数判断(弃⽤了):
user = ('user_info')
if not user:
url = url_for('l1')
return redirect(url)
三、配置⽂件:
设置⽅法fig[‘DEBUG’] = True
设置⽅法2 app.debug = True-设置⽅法2 app.debug = True
设置⽅法3 最规范直接做⼀个setting.py 然后去调⽤即可
main⽂件: fig.from_object(“python类或类的路径”)
例: fig.from_object(‘pro_flask.settings.TestingConfig’) setting.py内的类:
class TestingConfig(Config):
—— TESTING = True
ps:知识点
django rest framework
django 中间件
需求:
cpu占⽤90%,发送警报:邮件。。。。route add命令实例
数据库操作:mysql。。。。
缓存放在redis/memcache 调换使⽤ 可以放在配置⽂件去if else
四、路由系统需要扩展(diango可直接实现):
1.代码如下:
def route(self, rule,**options):
def decorator(f):
endpoint = options.pop('endpoint', None)
self.add_url_rule(rule, endpoint, f,**options)  #add_url_rule加到路由表中return f
return decoratordef
可⽀持cbv 层层嵌套继承
url重定向 、 为保留原地址可⽤ : redirect_to="/新地址后缀“
subdomain=None #代表域名前部
2. 域名变化
@ute("/dynamic", subdomain="<username>")
def username_index(username):
"""Dynamic subdomains are also supported
Try going ur-domain.tld/dynamic"""
return username +".your-domain.tld"
ps : c-window-system32-drivers-etc-hosts 修改域名,测试⼈员常⽤ username : 字符串
int:post_id :整型
3.正则表达式需进⾏⾃制
创建类
class RegexConverter(BaseConverter):
"""
⾃定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
< = regex
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:
param value:
:return:
"""
return int(value)    #格式检测转换
def to_url(self, value):
"""
使⽤url_for反向⽣成URL时,传递的参数经过该⽅法处理,返回的值⽤于⽣成URL中的参数  :param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val
#添加到flask中
app.verters['regex'] = RegexConverter
@ute('/index/<regex("\d+"):nid>')
def index(nid):
print(url_for('index', nid='888'))
return 'Index'
if __name__ == '__main__':
app.run()
五、模板语⾔(防⽌xss攻击):
django内有管道语⾔ mark_safe ,⽽ flask与之对应的是markup
在flask内可以做块来完成
{% macro input(name,type='text', value='')%}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}
六、请求响应
1. @app.before_request
request 顺序执⾏
2. @app.after_request
response 倒序执⾏
3. 若拦截只拦截之后请求但不拦截响应
4. 定制报错机制
#错误页⾯定制函数
@handler(404)
def error_404(arg):
return"不要瞎加url"
5. 模板定制⽅法
@plate_global()
def sb(a1, a2):
return a1 + a2
对应html: {{sb(1,2)}}
@plate_filter()
def db(a1, a2, a3):
return a1 + a2 + a3
对应html:{{ 1|db(2,3)}}
最常⽤
@app.before_request
@app.after_request
⽩名单
七、session 服务端保存⽅式回写 cookie加密——————————————————————————————————————
1.装饰器还需引⽤ functools 防⽌之后修饰的函数函数名不变,同时防⽌之后函数名重复这样就可以不⽤ endpoint

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。