实战Django之views视图的(FBV,CBV,FBV装饰器,CBV装饰器)

目录


1.创建Django项目

Django之创建项目【二】:https://blog.csdn.net/Burgess_zheng/article/details/86505526

2.创建app(并且app目录下创建一个urls.py文件)

进入项目目录下
创建app命令:
    F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py startapp submit_views

3.定义请求的URL路由分发

路径:project_burgess/project_burgess/urls.py

from django.contrib import admin
from django.urls import path,re_path #Django版本2.0以上
from project_burgess import views
from django.conf.urls import url  #Django2.0
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
   
    #提交各种数据数据类型测试
    re_path('submit/', include("submit_views.urls")),
    # url(r'^submit/', include("submit_views.urls")),

]

4.定义app下的URL路由

路径:project_burgess/submit_views/urls.py

__author__ = "Burgess Zheng"
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from django.urls import path,re_path #Django版本2.0以上
from submit_views import views
from django.conf.urls import url  #Django2.0

app_name='namespace'
urlpatterns = [
    #FBV
    re_path('fbv/', views.fbv),
    #url(r'^fbv', views.submit_handle),

    #CBV
    re_path('cbv/', views.Cbv.as_view()),
    #url(r'^cbv', views.Cbv.as_view()),
]

5.定义FBV,CBV,FBV装饰器,CBV装饰器

路径:project_burgess/submit_views/views.py

#装饰器
def auth(func):
    def inner(request,*args,**kwargs):
        print('Im decorator 我是装饰器')
        #这里可以进行session或者cookie验证之类的操作
        return func(request,*args,**kwargs)
    return inner


@auth #函数装饰我们自定义的装饰器
def fbv(request):
    print(request.method)
    print('装饰器认证通过,说明你是有效用户')
    return render(request,'fbv_Cbv.html',{'name':'fbv'})

####被装饰类Order(三种装饰模式)#####
#第一种装饰类里面某个指定函数
#第二种装饰类里面所有的函数(基于该类的父类的dispatch方法)
#第三种装饰类里面所有的函数(基于该类的父类的dispatch方法)

from django.views import View
from django.utils.decorators import method_decorator#装饰需求模块
@method_decorator(auth,name='dispatch')#第三种装饰形式
class Cbv(View):
    #@method_decorator(auth)#第二种装饰形式
    def dispatch(self, request, *args, **kwargs):
        # 请求来了先调用dispatch该方法,等于该方法接收了用户所有的请求内容
        print('before')
        result = super(Cbv, self).dispatch(request, *args, **kwargs)
        # super:调用父类View初始化信息 ,这里就代表着调用了父类View的dispatch方法
        # 首先用户请求过来
        # 父类的dispatch接收到了用户请求(所有的数据),
        # 1.执行打印显示before
        # 2.执行super,super是调用了父类的View的dispatch的执行(进行判断请求方式通过反射调取相应方法执行)
        # 3.相应的方法执行完毕以后结果赋值个result,
        # 4假如是get请求  我们写的get方法处理结果是打印该请求,返回home.html内容
        # 5.执行打印显示after
        # 6.返回给用户数据
        # 最终执行后台会打印显示:before  GET  after
        print('after')
        return result

    #@method_decorator(auth) #第一种装饰形式
    def get(self, request):  # 自动识别,如果用户请求方式:get,那么自动调用该方法执行结果
        print(request.method)
        print('装饰器认证通过,说明你是有效用户')
        return render(request, 'fbv_Cbv.html',{'name':'Cbv'})

    def post(self, request):
        print(request.method)  # 自动识别,如果用户请求方式:post,那么自动调用该方法执行结果
        return render(request, 'fbv_Cbv.html',{'name':'Cbv'})


6.定义响应的html文件

路径:project_burgess/templates/fbv_Cbv.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{{ name }}</h1>
</body>
</html>

7.启动Django

手动:python manage.py runserver 127.0.0.1:8000

pycharm:

扫描二维码关注公众号,回复: 4976451 查看本文章

8.浏览器访问URL结果

get请求

查看后台

get请求

查看后台

下一篇:Django之view视图处理(FBV,CBV,装饰器,前后端交互各种数据类型和响应,请求头相关信息)【四】https://blog.csdn.net/Burgess_zheng/article/details/86539387

猜你喜欢

转载自blog.csdn.net/Burgess_zheng/article/details/86545000