西北网站建设,怎么样做网站优化,写作网站都有哪些ppp,wordpress绑定域名类视图
思考#xff1a;一个视图#xff0c;是否可以处理两种逻辑#xff1f;比如get和post请求逻辑。
如何在一个视图中处理get和post请求 注册视图处理get和post请求
以函数的方式定义的视图称为函数视图#xff0c;函数视图便于理解。但是遇到一个视图对应的路径提供…类视图
思考一个视图是否可以处理两种逻辑比如get和post请求逻辑。
如何在一个视图中处理get和post请求 注册视图处理get和post请求
以函数的方式定义的视图称为函数视图函数视图便于理解。但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时便需要在一个函数中编写不同的业务逻辑代码可读性与复用性都不佳。
def register(request):处理注册# 获取请求方法判断是GET/POST请求if request.method GET:# 处理GET请求返回注册页面return render(request, register.html)else:# 处理POST请求实现注册逻辑return HttpResponse(这里实现注册逻辑)
类视图的多继承重写dispatch
class CenterView(View):def get(self,request):return HttpResponse(OK)def post(self,request):return HttpResponse(OK)使用面向对象多继承的特性。
class CenterView(LoginRequireMixin,View):def get(self,request):return HttpResponse(OK)def post(self,request):return HttpResponse(OK) 中间件
Django中的中间件是一个轻量级、底层的插件系统可以介入Django的请求和响应处理过程修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式增强了Django框架的健壮性。
我们可以使用中间件在Django处理视图的不同阶段对输入或输出进行干预。
中间件文档
1 中间件的定义方法
定义一个中间件工厂函数然后返回一个可以被调用的中间件。
中间件工厂函数需要接收一个可以调用的get_response对象。
返回的中间件也是一个可以被调用的对象并且像视图一样需要接收一个request对象参数返回一个response对象。
def simple_middleware(get_response):# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。def middleware(request):# 此处编写的代码会在每个请求处理视图前被调用。response get_response(request)# 此处编写的代码会在每个请求处理视图之后被调用。return responsereturn middleware例如在book应用中新建一个middleware.py文件
def my_middleware(get_response):print(init 被调用)def middleware(request):print(before request 被调用)response get_response(request)print(after response 被调用)return responsereturn middleware定义好中间件后需要在settings.py 文件中添加注册中间件
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,# django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,book.middleware.my_middleware, # 添加中间件
]定义一个视图进行测试
def middleware(request):print(view 视图被调用)return HttpResponse(OK)执行结果 注意Django运行在调试模式下中间件init部分有可能被调用两次。
2 多个中间件的执行顺序
在请求视图被处理前中间件由上至下依次执行在请求视图被处理后中间件由下至上依次执 示例
定义两个中间件
def my_middleware(get_response):print(init 被调用)def middleware(request):print(before request 被调用)response get_response(request)print(after response 被调用)return responsereturn middlewaredef my_middleware2(get_response):print(init2 被调用)def middleware(request):print(before request 2 被调用)response get_response(request)print(after response 2 被调用)return responsereturn middleware注册添加两个中间件
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,# django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,users.middleware.my_middleware, # 添加users.middleware.my_middleware2, # 添加
]执行结果
init2 被调用
init 被调用
before request 被调用
before request 2 被调用
view 视图被调用
after response 2 被调用
after response 被调用