【Django】函数视图和类视图、注册路由

1.视图函数

我们在子应用的views.py文件里写我们的视图函数,例如一个用户注册的函数

views.py

from django.shortcuts import render
from django import http


def register(request):
    if request.method == "GET":
        return http.HttpResponse('这里是注册页面')
    elif request.method == "POST":
        return http.HttpResponse('注册成功')

2.注册子路由

虽然写好了视图函数,但是现在还算不能通过浏览器访问该地址,因为缺少路由

我们在子应用文件夹里新建一个urls.py文件,并且添加路由列表

urls.py

from django.urls import path  # 导入path
from . import views  # 导入当前文件夹的views文件

urlpatterns = [
    # path()函数需要两个参数,第一个是地址的正则表达式,第二个是视图函数名
    path('users/register/', views.register),

    # 除了path()函数,还可以使用re_path()或url(),但是需要匹配开头和结尾
    # 例如re_path('^users/register/$',views.register),这样可以避免路由屏蔽问题
]

3.注册总路由

注册完子路由之后还是不能访问该路径,因为应用会先从总路由找,找到了include然后再进入子路由

我们打开项目文件的urls.py文件,然后添加子应用的路由

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('users.urls')),
]

不出意外的话现在应该已经可以访问 http://localhost:8000/users/register/这个地址了

4.类视图

用户请求同一个地址,可能会使用不同的请求方式,例如使用GET请求是返回注册页面,使用POST请求是请求注册账户,正如上面的函数视图一样,我们需要每次判断用户的请求方式。我们可以使用类视图的方式,根据请求方式不同处理不同的业务逻辑

类视图必须要继承Django的View类,而且函数名要与请求方式同名

from django import http
from django.views import View

# 函数视图
# def register(request):
#     if request.method == "GET":
#         return http.HttpResponse('这里是注册页面')
#     elif request.method == "POST":
#         return http.HttpResponse('注册成功')

# 类视图
class RegisterView(View):
    def get(self, request):
        return http.HttpResponse('这里是注册页面')

    def post(self, request):
        return http.HttpResponse('注册成功')

5.注册类视图

类视图的注册于函数视图的方式有点不一样,需要调用类的as_view()方法把类返回一个函数

from django.urls import path  # 导入path
from . import views  # 导入当前文件夹的views文件

urlpatterns = [

    path('users/register/', views.RegisterView.as_view()),

]

注意: Django默认开启了CSRF防护,会对非GET请求(POST, PUT, DELETE)进行CSRF防护验证,在测试时可关闭CSRF防护机制,只要在项目文件夹的settings.py找到MIDDLEWARE列表,注释掉写着csrf的那行即可

猜你喜欢

转载自blog.csdn.net/qq_39147299/article/details/108224541