Django允许接收的请求方法

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

函数视图

  1. 函数视图它是一个标准的Python函数
  2. 函数视图中, 第一个参数必须定义: 第一个参数为请求对象, 用于接收用户发送的请求报文.
  3. 在函数视图中, 必须返回响应对象: 用于构成响应报文, 并响应给用户
  • 请求对象: HTTPRequest() 对应的对象
  • 响应对象: HTTPResponse() 对应的对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from django import http

    # 创建一个函数视图
    def text_view(request):
    """
    函数视图
    :param request:包含请求报文信息,请求对象
    :return: 响应对象,用于构造响应报文,并响应给用户
    """
    # 响应数据调用http
    return http.HTTPResponse("数据data")
    这里如果有请求路径相同, 但是请求方式不同, 就需要在函数视图内加一个判断
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def text_view(request):
    """
    函数视图
    :param request:包含请求报文信息,请求对象
    :return: 响应对象,用于构造响应报文,并响应给用户
    """

    # 先判断请求方法是什么如"GET","POST"
    if request.method == "GET":
    # 处理GET请求
    return http.HTTPResponse("数据data")
    elif request.method == "POST":
    # 处理POST请求
    return http.HTTPResponse("数据data")

类视图

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

在类视图中

  • 需要定义跟请求方法同名的函数来对应不同的请求方式
  • 在请求方法同名的函数中,还必须定义一个接收请求的参数(跟函数视图一样)
  • 在请求方法同名的函数中, 也必须返回一个相应对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.views import View


class CodeView(View):
"""
类视图
"""
def get(self, request)
"""
处理GET请求
"""
return http.HttpResponse("数据")

def post(self, request)
"""
处理POST请求
"""
return http.HttpResponse("数据")

...

路由

定义路由的方法:path()、re_path()、url()
Django==1.x版本:url()
Django==2.x版本:path()、re_path()
说明:
为了在版本迭代中,保留旧版本的路由系统,url()在新版中依然可用。
并新增了一个url()的替代方案re_path(),所以url()几乎跟re_path()一样。

路由方法对比

path()

1
2
3
4
5
6
# 函数视图path()路由语法:
# path('网络地址正则表达式', 函数视图名),

# 类视图path()路由语法:
# path('网络地址正则表达式', 类视图.as_view()),
path()路由语法中,不需要定义正则表达式严格的开头和结尾,因为已经封装好了

re_path()、url()

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

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

# 类视图url()路由语法:
# url(r'^网络地址正则表达式$', 类视图.as_view()),
re_path()和url()路由语法中,必须要定义正则表达式严格的开头和结尾

总路由

在Django中一个子应用对应一个总路由
总路由中,使用include()子应用里面的所有路由都包含在工程总路由中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
# 自带的后台管理系统的总路由:可以忽略
path('admin/', admin.site.urls),

# 总路由包含子路由语法
# path('网络地址前缀/', include('子应用.urls')),
# 或者
# path('', include('子应用.urls')),

# 例:
# 用户模块:http://127.0.0.1:8000/users/register/
path('', include('users.urls')),
]

函数视图的路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.urls import path

# 把当前文件下的视图文件导进来
from . import views


# urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
urlpatterns = [
# 函数视图路由语法:
# path('网络地址正则表达式', 函数视图名),

# 例:
# 用户注册:http://127.0.0.1:8000/users/register/
path('users/register/', views.register),
]

类视图定义路由

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.urls import path

from . import views

# urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
urlpatterns = [
# 类视图路由语法:
# path('网络地址正则表达式', 类视图.as_view()),

# 用户注册:http://127.0.0.1:8000/users/register/
path('users/register/', views.RegisterView.as_view()),
]