1.django的分布式路由、视图装饰器、视图类

一、分布式路由

1.创建好应用app1

python manage.py startapp app1

2.设置主路由

#打开项目的的主urls.py文件,导入include方法
from django.urls import path,include


urlpatterns = [
    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 View


data = {
    '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/

你可能感兴趣的:(pyhton框架,django,python,分布式)