您的位置:首页 > 编程语言 > Go语言

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

2019-01-18 21:02 495 查看
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86545000

目录篇:Django之前后端交互篇目录 点击跳转
主篇:Django之view视图处理【交互篇二】点击跳转

目录

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

[code]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

[code]__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

[code]#装饰器
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

[code]<!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:

8.浏览器访问URL结果

get请求

查看后台

get请求

查看后台

 

目录篇:Django之前后端交互篇目录 点击跳转
主篇:Django之view视图处理【交互篇二】点击跳转​​​​​​​​​​​​​​

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: