URL 管理
URL 与路由
在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫 URL。在 Django 中,会根据用户请求的 URL 链接来判断对应的处理程序,并返回处理结果,也就是 URL 与 Django 的视图建立映射关系,这个关系也被称为路由。
举个栗子,你去访问0.0.0.0:8000/test,Django 识别到这个地址的 URL 是test,它就会先去urls.py中查表,检查应该调用哪个函数对这个请求进行处理,这个过程就是通过路由管理实现的。
用户注册
创建视图
打开user/views.py,这里将会存放一个个视图函数,来处理每一次 URL 请求。在里面新建一个注册函数:
from django.shortcuts import render
import json
from user.models import User
from django.http import JsonResponse
# Create your views here.
def register(request):
    if request.method == 'POST':
        print("POST")
        return JsonResponse({'result': 1, 'message': '注册成功!'})
这个函数体会在下一个小节进一步完善,目前只是用来测试路由是否配置正确。
注册 URL
在user下新建urls.py,在其中写入如下内容:
from django.urls import path
from user.views import *
urlpatterns = [
    path('register', register),
    # 前一项是URL,后面是绑定的 views 中的函数
    # 当匹配到'register'这个 URL 时
    # 将参数传递进 register 函数进行处理
    # 名字允许不一致,一般写成一样的清晰一些
]
同时,修改hello/urls.py中的内容:
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include(('user.urls', 'user'), namespace="user")),
    # 新增对 user/ 的匹配
]
在当前的 URL 配置下,当后端收到一条形如IP:端口/user/register的请求后,会先去hello/urls.py中进行匹配,其中user/被匹配上,于是去user/urls.py中继续匹配,URL 中的register被匹配上后,就会转到register函数进行处理。
这种将一个应用中的 URL 在项目的urls.py中注册为一条的写法可以让路由配置更加清晰。其实也可以直接在hello/urls.py中写明user/register直接转register函数,但是当一个项目中的接口多起来之后,很难找到谁对应谁,按应用分别注册更方便管理。
Postman 测试接口
路由都配置完毕后,接下来测试接口的正确性。打开 Postman,在user文件夹下新建一个请求:

将请求类型改为 post,并填入地址:

启动 Django 项目,然后点击send,发现报错,出现了跨域的问题:

修改一下views.py,改成下面格式:
from django.shortcuts import render
import json
from user.models import User
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
# 引入解决跨域问题的修饰符
# Create your views here.
@csrf_exempt    # 修饰符,URL 绑定的每个函数都要加这个东西
def register(request):
    if request.method == 'POST':
        print("POST")
        return JsonResponse({'result': 1, 'message': '注册成功!'})
这时候再启动项目,发送请求,就可以看到正常结果:


请求返回值为 200,相应时间 10 ms,返回结果渲染正常。这就说明路由已经正确配置了。
到这里路由配置过程就已经结束了。相关代码已经提交到了 Github 的示例项目上,最后一次 commit 的注释为“Finish URL”。