1.django的分布式路由、视图装饰器、视图类
创始人
2024-05-31 23:01:46

一、分布式路由

1.创建好应用app1

python manage.py startapp app1

2.设置主路由

#打开项目的的主urls.py文件,导入include方法
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#增加分布式路由,将用户访问127.0.0.1:8000/app1的请求都转发到app1应用的urls文件的路由中。path('app1/',include('app1.urls')) 
]

3.配置子路由

在应用app1下新建文件urls.py文件,增加以下内容

from django.urls import path
#将视图文件中的视图函数都导入进来
from .views import *urlpatterns = [#访问根路径的配置.index为函数的名称path('', index),path('test/',test)
]

4.配置视图函数

打开views.py文件,新建视图函数

from django.http.response import  HttpResponse#这里要注意一下,所有的视图函数第一参数必须是request参数
def index(request):return  HttpResponse('

app1 page

')def test(request):return HttpResponse('

test page

')

5.访问子路由

http://127.0.0.1:8000/app1/
http://127.0.0.1:8000/app1/test

6.返回json数据

#导入JsonResponse
from django.http.response import  HttpResponse,JsonResponse
from django.views import Viewdata = {'name': 'zhangsan','age': 20
}#返回json数据
def index(request):return JsonResponse(data)

二、视图装饰器

视图装饰器的主要作用是,限制用户只能使用某种方法来访问此视图函数。当限制了用户使用特定的方法访问视图函数时,返回结果为405而不再是500

#导入
from django.views.decorators.http import require_http_methods,require_GET,require_POST#@require_GET 或者@require_POST 或者 @require_http_methods(['GET','POST'])
def test(request):return HttpResponse('

test page

')

三、视图类

django还给我们提供了另外一种和视图函数一样功能的方法,那就是"视图类"。

1.编写视图类

打开app1应用的下的views.py

from django.http.response import  HttpResponse,JsonResponse
from django.views import View#自定义的视图类必须要继承VIew这个基类。类中的方法名字就是用户用什么method方法请求的,就会对应到什么方法上去。这样就不会向视图函数那样,需要单独在用视图装饰器在装饰了
class test(View):def get(self,request):return  HttpResponse('这是get方法的返回值')def post(self,request):return HttpResponse('这是post方法的返回值')def put(self,request):return HttpResponse('这是put方法的返回值')

2.路由配置

主路由配置不会变化,子路由编写的时候会发生变化。在编写好视图类之后

#导入基类,自己编写的视图类,必须要继承这个基类
from django.views import View
from .views import *urlpatterns = [# as_view()只能是类和子类调用,实例不能调用#这里调用的时候是:"自己编写的视图类名字 + as_view()"  as_view()是固定写法。#as_view()是类中的方法,源码中这个方法返回的是view函数的地址。所以这时候和视图函数的格式是一样的。所以这里这么写就不奇怪了。path('test/',test.as_view())
]

注意:

as_view中的view函数做什么了事情?
1.每一次用户请求调用as_view函数的时候,as_view把view视图函数返回
2.view函数会根据请求生成对应的 “实例” ,这样的就用不同的 “实例” 区分出来的了不同的请求,也就是说区分出来了每一个独立的请求。也是是和普通视图函数最大的区别
3.最后在通过dispatch函数在派发到对应的 方法 上去

3.访问测试

!!!注意:在测试的时候需要把下行内容在settings.py中注释掉

'django.middleware.csrf.CsrfViewMiddleware'
分别使用get,post,put方法访问
127.0.0.1:8000/app1/test/

相关内容

热门资讯

努力为经营主体搭好“戏台” 转自:贵州日报 伍少安一个地区经营主体的活力指数,直接决定着这片土地的发展热度。要运用好“有效市场+...
为非遗注入时尚力量 转自:贵州日报 权若青凯里“绣里淘”非遗集市,草木染的清香在空气中浮动,苗语叫卖声如古老歌谣在耳畔回...
贵州理工学院4门课程获批国家级... 转自:贵州日报 本报讯(记者 王雨)记者从贵州理工学院获悉,近日教育部发布《教育部关于公布第三批国家...
“贵州造”给煤矿安全装上“顺风... 转自:贵州日报贵州省能源智能开发与高效利用实验室。 张凌 摄 贵州日报天眼新闻记者 张凌在贵州深邃复...
一块钢板如何变为风力发电机组的... 转自:贵州日报贵州保龙设备制造有限公司风电塔筒生产车间内,工人对塔筒焊接口进行打磨。 贵州日报天眼新...