flask02
-web框架 -从浏览器输入一个地址,发送请求,经历了哪些过程
-反向代理,正向代理
-正向代理代理客户
-反向代理代理服务器
-你用过的python中的魔法方法:https://www.cnblogs.com/liuqingzheng/articles/9949568.html#_label3
-python中对象 []放值,取值
-重写__setitem__和__getitem__这俩方法
-Django中request.POST 是个字典
-QueryDict
-1 d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']}):对象['name']取到最后一个
-2 有一个最大特点:不能修改,一修改就报错
def index(request):
print(type(request.GET))
aa=request.GET.dict()
aa['name']='lqz'
from django.http.request import QueryDict
return HttpResponse('ok')
-你在开发中遇到的问题以及是如何解决的 -flask快速入门
-配置文件
-app.config[]
-app.config.from_object:推荐使用,可以有测试环境和上线环境(类控制)
-四件套
-路由:基于装饰器
-本质:app.add_rule_url
-参数:路径(转换器),函数内存地址,endpoint别名,defaults:默认参数,斜杠的严格模式,重定向
-CBV
-定义个类继承MethodView
get ,post,delete....
-控制请求的方法
-decorators----源码如何实现的,放在第一个位置是包在最内层的
反向解析:url_for 转换器支持正则: -自定义转化器 from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter
app = Flask(import_name=name)
class RegexConverter(BaseConverter):
""" 自定义URL匹配正则表达式 """
def init(self, map, regex):
super(RegexConverter, self).init(map)
self.regex = regex
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
"""
return int(value)
def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
"""
val = super(RegexConverter, self).to_url(value)
return val
# 添加到flask中
# regex 是我们自定义的
app.url_map.converters['regex'] = RegexConverter
@app.route('/index/<regex("\d+"):nid>')
def index(nid):
print(type(nid))
print(url_for('index', nid='888'))
return 'Index'
if __name__ == '__main__':
app.run()
-jinga2 模板语言
-支持函数加括号并且传参
-其它的用法完全同DTL
-模板中处理:{{ss|safe}}
-视图函数中用 ss=Markup(ss)
-有没有处理xss攻击?处理了
-处理xss攻击
-html中的特殊符号
-请求响应
-request请求对象
-form,args,method 其它的了解
-response响应对象
-写cookie,写headers
obj=make_response('indexddadsaasdf')
# obj.set_cookie('lqz','xxxxxx')
# obj.delete_cookie('lqz')
#响应头
obj.headers['xxxxx']='yyyyyy'
-session
-cookie,session,token分别是什么? -使用必须先设置一下秘钥:app.secret_key='asfdasdfasdfasdf'
-session['name']='lqz' 放值,取值session['name']
-源码执行流程
-save_session
-响应的时候,把session中的值加密序列化放到了cookie中,返回到浏览器中
-open_session
-请求来了,从cookie中取出值,反解,生成session对象,以后再视图函数中直接用session就可以了
-session.modified
-闪现
-使用
-设置值
flash('我出错了')
flash('超时错误',category="x1")
-取值:一旦取过一次,再另一个视图函数中再取就没了
get_flashed_messages()
get_flashed_messages(category_filter=['x1','x2'])
-使用场景:
-在某个位置放一个值,过会去取出来
-请求扩展
-before_request
@app.before_request
def before_request():
print('来了')
-afer_request
@app.after_request
def after_request(response):
print(type(response))
print('走了了')
return response
-*****注意:
1 执行顺序
2 如果before_request返回了,afer_request,如何走的
-before_first_request(服务一启动,第一次请求会走,以后再也不走了)
@app.before_first_request
def first():
print('我的第一次')
-teardown_request
@app.teardown_request
def ter(e):
print(e)
print('无论如何都会走,即便出了异常')
-errorhandler
@app.errorhandler(404)
def error_404(arg):
# return render_template('')
return '你迷路了'
-标签和过滤器
@app.template_glob #标签
def sb(a1, a2):
return a1 + a2
#{{sb(1,2)}}
@app.template_filter()
def db(a1, a2, a3):
return a1 + a2 + a3
#{{1|db(2,3)}}
-中间件(跟django中的中间件不一样)
-flask中一旦请求到来,要执行app()---->执行的是app.__call__,整个flask的入口
-代码实现(了解)
from flask import Flask,session,url_for,redirect,request,flash,get_flashed_messages,render_template
app = Flask(__name__)
class MyMiddleWare():
def __init__(self,my_wsgi_app):
self.wsgi_app=my_wsgi_app
def __call__(self, environ, start_response):
print('之前执行一些东西')
obj=self.wsgi_app(environ, start_response)
print('之后执行一些东西')
return obj
@app.route('/',methods=['GET','POST'])
def index():
return 'ok'
if __name__ == '__main__':
app.__call__
# app.run()
app.wsgi_app = MyMiddleWare(app.wsgi_app)
app.run()
#请求来了,执行app.__call__本质执行的是:self.wsgi_app(environ, start_response),app.wsgi_app(environ, start_response),
# 会调到自己写的类的__call__方法
-蓝图
-分文件,分目录 -使用蓝图划分文件目录
0 生成蓝图对象
admin = Blueprint(
'admin',
__name__,
template_folder='templates',
static_folder='static'
)
1 注册蓝图
-url_prefix访问路由的前缀
app.register_blueprint(admin, url_prefix='/admin')
3 使用(只在当前蓝图下有效)
-注册路由
@admin.route('/index')
-请求扩展相关
@admin.before_request
-请求上下文
-request对象
-对象() 会执行对象的__call__
-每当来一个请求,就会执行app.__call__()
补充:
-中间件:
-中间件是一个很大的概念
-web中间件
-数据库中间件
-消息队列中间件
-flask整个源码:
ctx = self.request_context(environ)
error = None
try:
try:
ctx.push()
#根据路径去执行视图函数、视图类
response = self.full_dispatch_request()
except Exception as e:
error = e
response = self.handle_exception(e)
except: # noqa: B001
error = sys.exc_info()[1]
raise
return response(environ, start_response)
finally:
#不管出不出异常,都会走这
if self.should_ignore_error(error):
error = None
ctx.auto_pop(error)
flask02的更多相关文章
- Flask02 路由的书写、蓝图、利用蓝图实现url前缀、利用蓝图实现子域名、访问静态文件
1 书写路由的两种方法 1.1 利用Flask实例对象的 add_url_rule 方法实现 该方法有一个必填参数,两个默认参数 · rule : 请求路径的规则 endpoint : 端点,默认值是 ...
- Flask学习 2修改路由规则 传入参数访问url
#!/usr/bin/env python # encoding: utf-8 """ @version: v1.0 @author: cxa @file: flask0 ...
随机推荐
- php红包功能
最近公司要开发 广告红包功能,这是写好的代码先放到这 https://files.cnblogs.com/files/jxkshu/PHP%E5%B9%BF%E5%91%8A%E7%BA%A2%E5% ...
- win10半夜自动开机的问题分析
win10半夜自动开机的系统日志: 解决方法一: 1.根据日志判断自动唤醒后,windows更新了时间和代理 服务管理器中,关闭windows update, 但是半夜还会自动开 再关闭服务管理器的w ...
- Note-Git:Git 笔记
ylbtech-Note-Git:Git 笔记 1.返回顶部 · Git 分支管理: 主干/master.热修正/hotfix.预生产/release.开发develop.个人1(个人.小团队)/f ...
- Unity 带骨骼的人体模型换装
直入主题: 1.实验材料 两个模型,虽然缺胳膊少腿的,但是能用!!! 2.条件 两个模型在制作时是基于同一套骨骼,导出模型部位时连着该部位的骨骼一起导出,这样导入到Unity的模型就带有Skinned ...
- Dapper - a simple object mapper for .Net
Dapper - a simple object mapper for .Net Release Notes Located at stackexchange.github.io/Dapper Pac ...
- 【ABAP系列】SAP LSWM处理时,网络中断,出现错误
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP LSWM处理时,网络中断 ...
- 理解jquery的$.extend()、$.fn.extend()【jQuery插件机制】
/** * 操作数据 | DOM 操作 * @description jQuery类添加类方法,可以理解为添加静态方法,将一个或多个对象的内容合并到目标对象 * @use $.fn.zhang() | ...
- hdu6576Worker(最小公倍数)
Problem Description Avin meets a rich customer today. He will earn 1 million dollars if he can solve ...
- php编程怎么和mysql连接
php连接mysql的方法: MySQLi - 面向对象 MySQLi - 面向过程 关闭连接 连接在脚本执行完后会自动关闭.你也可以使用以下代码来关闭连接: (MySQLi - 面向对象 MySQL ...
- mysql处理重复数据仅保留一条记录
目的:去除(或删除)一个表里面手机号重复的数据,但是需要保留其中一个记录,换句话说,表里面手机号不为空的数据,一个手机有且只有一条记录 表结构: CREATE TABLE `account` ( `i ...