多语言展示
当前在线:368今日阅读:84今日分享:32

Django类视图使用装饰器

Django类视图使用装饰器,可以在请求处理函数返回响应对象前做额外的操作。
方法/步骤
1

登录Ubuntu虚拟机,进入虚拟环境创建django工程,在工程内创建应用,命令如下;workon djangotestdjango-admin startproject djviewdecd djviewdepython manage.py startapp book

2

在工程的配置文件settings.py注册应用,添加本机ip到allowed_hosts,注释掉中间件  'django.middleware.csrf.CsrfViewMiddleware'cd djviewdevi settings.py修改部分的settings.py文件如下:ALLOWED_HOSTS = ['192.168.128.128']# Application definitionINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'book.apps.BookConfig',]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',]

3

在book应用的views.py编写一个类视图,和一个装饰器函数cd ../bookvi views.pyviews.py文件如下:from django.shortcuts import renderfrom django.views.generic import Viewfrom django.http import HttpResponse# Create your views here.def mydecorater(fun):    def wrapper(request,*args,**kwargs):        print (request.method)        return fun(request,*args,**kwargs)    return wrapperclass index(View):    def get(self,request):        return HttpResponse('get page')    def post(self,request):        return HttpResponse('post page')解释一下:装饰器mydecorater用来装饰urls.py中的as_view函数,相当于这个函数在as_view返回前做了额外的操作。

4

在工程的urls.py文件include应用的urlscd ../djviewdevi urls.pyurls.py文件如下:from django.conf.urls import url,includefrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^book/', include('book.urls')),]

5

在book应用创建urls.py文件,并编写到index类视图的url,注意要加装饰器cd ../bookvi urls.pyurls.py文件如下:from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^index/', views.mydecorater(views.index.as_view())),]

6

在本机ip和端口8000上 运行django服务器cd ..python manage.py runserver 192.168.128.128:8000

7

在局域网另一台电脑使用POSTMAN,发送get请求,网址如下:http://192.168.128.128:8000/book/index/返回:get pageUbuntu终端打印出:GET

8

在局域网另一台电脑使用POSTMAN,发送post请求,网址如下:http://192.168.128.128:8000/book/index/返回:post pageUbuntu终端打印出:POST装饰器成功

注意事项

装饰器还有其他方法,这是最简单的一种

推荐信息