django中允许的接收请求的方法:

[‘get’, ‘post’, ‘put’, ‘patch’, ‘delete’, ‘head’, ‘options’, ‘trace’]

函数试图和类试图用于请求响应的对象:

  • 请求对象: HTTPRequest() 对应的对象
  • 响应对象: HTTPResponse() 对应的对象

导入

from django.http import HttpRequest from django.http import HttpResponse

函数试图

定义:

  1. 函数视图它是一个标准的Python函数
  2. 函数视图中, 第一个参数必须定义: 第一个参数为请求对象, 用于接收用户发送的请求报文.
  3. 在函数视图中, 必须返回响应对象: 用于构成响应报文, 并响应给用户

    1. def index(request):
    2. return HttpResponse('index')

    如果试图函数需要接收不同的请求方法,则需要在试图函数中加判断,来分开处理,也可以配合装饰器来限制请求方法。

    类视图

    类视图是一个Python类,定义类视图时需要继承Django中提供的父类视图 View。

  4. 需要定义跟请求方法同名的函数来对应不同的请求方式

  5. 在请求方法同名的函数中,还必须定义一个接收请求的参数(跟函数视图一样)
  6. 在请求方法同名的函数中, 也必须返回一个相应对象 ```python from django.views import View from django import http

class CodeView(View): “””类视图”””

  1. def get(self, request)
  2. """处理GET请求"""
  3. return http.HttpResponse("数据")
  4. def post(self, request)
  5. """处理POST请求"""
  6. return http.HttpResponse("数据")
  1. <a name="Cod74"></a>
  2. ### 函数视图与类试图的比较
  3. 类视图的好处:<br />使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义,代码可读性好。<br />类视图相对于函数视图有更高的复用性, 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可。<br />函数视图的好处:<br />定义简洁,清晰易懂。
  4. <a name="NZOR1"></a>
  5. ### 路由定义
  6. <a name="fKeYg"></a>
  7. #### 使用path()函数
  8. ```python
  9. # 函数视图
  10. path('网络地址正则表达式', 函数视图名)
  11. # 类视图
  12. path('网络地址正则表达式', 类视图.as_view())

path()路由语法中,不需要定义正则表达式严格的开头和结尾,因为已经封装好了。

使用re_path()、url()函数

  1. # 函数视图re_path()路由语法:
  2. re_path(r'^网络地址正则表达式$', 函数视图名)
  3. # 类视图re_path()路由语法:
  4. re_path(r'^网络地址正则表达式$', 类视图.as_view())
  5. # 函数视图url()路由语法:
  6. url(r'^网络地址正则表达式$', 函数视图名),
  7. # 类视图url()路由语法:
  8. url(r'^网络地址正则表达式$', 类视图.as_view())

re_path()和url()路由语法中,必须要定义正则表达式严格的开头和结尾。路由配置,django1.x版本使用url()函数,django2.x及以上的版本使用path()函数,另外django2.x的版本提供了re_path()函数来替换url(),其使用方法一样。

路由配置例子

总路由

在Django中,一个子应用对应一个总路由,总路由中,使用include()将子应用里面的所有路由都包含在工程总路由中,形成一个两级的映射关系。

  1. from django.contrib import admin
  2. from django.urls import path, include
  3. urlpatterns = [
  4. # 自带的后台管理系统的总路由:可以忽略
  5. path('admin/', admin.site.urls),
  6. # 总路由包含子路由语法
  7. # path('网络地址前缀/', include('子应用.urls')),
  8. # 或者
  9. # path('', include('子应用.urls')),
  10. # 例:
  11. # 用户模块:http://127.0.0.1:8000/users/register/
  12. path('', include('users.urls')),
  13. ]

函数试图的路由

  1. from django.urls import path
  2. from . import views # 把当前文件下的视图文件导进来
  3. # urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
  4. urlpatterns = [
  5. # path('网络地址正则表达式', 函数视图名),
  6. # 例:用户注册:http://127.0.0.1:8000/users/register/
  7. path('users/register/', views.register),
  8. ]

类视图定义路由

  1. from django.urls import path
  2. from . import views
  3. # urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
  4. urlpatterns = [
  5. # path('网络地址正则表达式', 类视图.as_view()),
  6. # 用户注册:http://127.0.0.1:8000/users/register/
  7. path('users/register/', views.RegisterView.as_view()),
  8. ]

类试图调用过程参考文章:https://www.cnblogs.com/olivertian/p/11072528.html
参考文章:https://blog.csdn.net/lxb_wyf/article/details/109710916