使用面向对象多继承的特性:
子应用中book/views.py
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from book.models import BookInfo
import json,re
# Create your views here.
###############类视图######################
def login(request):
print(request.method)
if request.method == 'GET':
return HttpResponse('get 逻辑')
else:
return HttpResponse("post 逻辑")
"""
类视图的定义
class 类视图名字(View)
def get(self,request):
return HttpResponse("xxx")
def http_method_lower(self,request):
return HttpResponse("xxx")
1、继承自View
2、类视图中的方法,是采用 http方法小写来区分不同的请求方式
"""
from django.views import View
class LoginView(View):
def get(self,request):
return HttpResponse('get get get')
def post(self,request):
return HttpResponse('post post post')
#################################################
"""
我的订单-个人中心页面
如果登录用户 可以访问
如果未登录用户 不应该访问,应该跳转到登录页面
定义一个订单、个人中心 类视图
如何定义有没有登录呢?我们以登录后台站点为例
"""
from django.contrib.auth.mixins import LoginRequiredMixin
#LoginRequiredMixin作用:判断只有登录用户才可以访问页面
class OrderView(LoginRequiredMixin,View):
def get(self,request):
# isLogin = False
# if not isLogin:
# return HttpResponse('没有登录,跳转到整理页面中~~~~~')
return HttpResponse('GET 我的订单页面,这页面必须登录')
def post(self,request):
return HttpResponse('POST 我的订单页面,这个页面必须登录')
"""
多继承
"""
image.png
image.png
本章需要关注继承顺序,如果class OrderView(View,LoginRequiredMinxin),从源码看,会先走View父类的dispatch方法,而无法走到LoginRequiredMinxin的dispatch方法,导致即使未登录,也可以正常访问,但是cookies里无sessionid 的key
image.png
class OrderView(LoginRequiredMinxin,View),从源码看,会先走LoginRequiredMinxin类的dispatch方法,进行登录验证,验证成功才可访问网页,验证不成功,不可访问网页
image.png
在127.0.0.1:8000/admin登录成功后,再次访问127.0.0.1:8000/order即可访问成功
image.png
image.png
中间件调用顺序
网友评论