flask划分目录(蓝图)
flask划分目录flask不使用蓝图划分目录123456789101112131415161718192021222324252627282930313233目录结构flask_study static templates views __init__.py order.py #app文件 user.py #app文件 main.py #main.py 项目的入口from views import app #从views导入app对象if __name__ == '__main__': app.run()#__init__.py 在这里实例化app对象from flask import Flask,url_for,redirect,viewsapp = Flask(__name__,template_folder='../templates')app.debug=True#user.pyfrom . import app #导入app对象@app.route( ...
布隆过滤器
布隆过滤器1234什么是布隆过滤器布隆过滤器是一种数据结构,用来判断某个值是否已经存在某个集合中了优点:空间效率和时间效率极高缺点:有一定的误识别率,并且随着数据量的增加这个误差的概率会越来越大
布隆过滤器的应用场景123布隆过滤器广泛应用于网页黑名单系统、垃圾邮件过滤系统、爬虫网址判重系统等。当你数据库有大量的数据的时候,你每次进行查询都是很消耗服务器资源的一种行为,并且对数据库的压力也会增大。这种时候就可以考虑使用布隆过滤器
布隆过滤器原理123456当有一个集合,并且集合里面有多个元素时,首先将位数组进行初始化,然后将集合中的数据通过hash函数获得对应的hash编码,这个编码可能对应位数组上的一个点获多个点,然后将位数组上对应的值更改为1.数据越多,对应的位数组上的值被改为1的越多。位数组:一个很长的二进制向量 布隆过滤器误判的原因当你将一个值通过hash函数获得对应的hash编码,可能这个值并没有存储过,但是被判断为已经存在过了。
哈希函数12哈希函数是布隆过滤器的基础,布隆过滤器也是根据哈希函数实现的哈希函数:将任意大小的数据转换成特定大小的数据的函数,转换后的数据称 ...
Flask请求扩展
Flask请求扩展12345678910111213141516171819202122232425262728293031Flask的请求扩展类似于django的中间件,在请求进入视图函数和离开视图函数之后执行的一些功能,总共有7个1.before_request:请求来之前执行(可以加多个,从上往下执行,等同于中间件的process_request)2.after_request:请求走之后(可以加多个,从下往上执行,等同于以中间件的process_response)3.before_first_request:项目运行后的第一次会执行它(初始化的工工作)4.teardown_request:出错也会走,记录日志5.errorhandler(404):状态码是响应的,就会触发它的执行#上面五个使用方法大致相似,与下面2个使用方法不一样@app.before_requestdef before(): #取出访问者的ip,记录一下 print(request.path) print('我执行了') return '回去' ...
Flask闪现
Flask闪现123456789101112131415161718闪现的本质就是先将一部分数据存储在某个位置,下次请求的时候取出来,取出以后该数据消失而flask的闪现是存放在session中的使用1.导入from flask import flash2.存值flash('aaa')3.取值get_flashed_message()4.设置闪现分类flash('超时错误',category="x1") 5.从对应的分类中取出数据data = get_flashed_messages(category_filter=['x1'])
Flask设置session
Flask设置session123456789101112131.设置密钥 app.secret_key = ''随机密钥2.导入全局session对象from flask import session3.赋值session['key'] = value4.取值session['key']ps:session存放的位置是浏览器端的cookie中,类似于荷载
session的执行流程1231.请求来了在open_session中取出cookie,反解数据,包装成session---》视图函数中使用session2.只要session修改了,请求走了---》save_session---》把session加密,放到cookie中,返回给前端3.不同浏览器,cookie不同(你的淘宝,同一个浏览器只能登陆一个用户)
Flask的请求响应
Flask的请求对象123456789101112131415161718192021222324251.导入位置from flask import request2.request中的各个属性 # print(type(request.values['name'])) # post和get提交的数据总和 还是个字典 # print(request.full_path) # 全路径 # print(request.url) # 带数据 # print(request.base_url) # 带域名 # print(request.files) # 等同于django中的request.FILES # 请求相关信息 # request.method 提交的方法 # request.args get请求提及的数据 # request.form post请求提交的数据 # request.values post和get提交的数据总和 # request.cookies 客户端所 ...
Flask的模板语言
Flask的模板语言是按Jinja2模板语言的标准,基于jinja2做了一点点的封装
1234567891011121314可以说flask的模板语言与django中的模板语言大致相同,但是具备django模板语言所不具备的一些点1.flask往模板中传递数据STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}def index(): return render_template("student.html", student=STUDENT)2.flask模板语言可以使用.[]get的方式取值<td>{{ student.name }}</td><td>{{ student["age"] }}</td><td>{{ ...
Flask的CBV如何使用
Flask的CBV如何使用123456789101112131.导入from flask import views2.新建一个类继承views中的MethodView,并在里面重写方法即可class Index(views.MethodView): methods=["GET"] #允许的请求方式 def get(self): pass ps:如果继承view.View需要重写dispatch_request()方法,MethodView帮助你写好了dispatch_request 3.在app.add_url_rule中注册路由app.add_url_rule('/',endpoint='index',view_func=index.as_view(name='index')) #as_view中的name必填
CBV装饰器的使用12345678910只需要在类中添加一个decorator属性class Index(views.MethodView): de ...
flask的路由系统
flask的路由系统1234567891011121314151617181920212223flask中最经典的设置路由的方式是通过装饰器@app.route('/')#route的参数1.rule 路径 #这个必须要填2.options methods #允许进入的请求方式,例如GET,POST endpoint #别名,用于做反向解析,不写,默认是函数名 default #给函数传递的参数 redirect_to #重定向的地址 strict_slashes = None #对URL最后的 / 符号是否严格要求 #转换器我们还可以使用在路由中使用转换器eg: @app.route('/detail/<int:nid>',methods=['GET'],endpoint='detail')flask我们还可以设置另外一种路由方式#FBV式的app.add_url_rule('/',endpoint='index ...
drf视图类及路由设置
drf视图类及路由设置drf两个基类1.APIView
该类是继承了django原生view类的drf类,他重写了django类的as_view方法,将request换成了自己的request,并做了认证等功能
ps:可以从rest_framework.views
2.GenericAPIView
该类继承了APIView是对APIView的进一步封装
ps:可以从 rest_framework.generics 导入
123456789101112#继承该类后你只需要在类的开头为类添加queryset,serializer_class#之后每次之后每次只需要调用get_queryset()就可以或得queryset对象#每次只需要调用get_serializer()就可以或得序列化器对象对象class Books(GenericAPIView): queryset = models.Book.objects.all() serializer_class = serialize.BookSerializer def get(s ...