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文件夹下新建一个请求:

image-20220124110142971

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

image-20220124110301530

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

image-20220124110534008

修改一下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': '注册成功!'})

这时候再启动项目,发送请求,就可以看到正常结果:

image-20220124111141224

image-20220124111150793

请求返回值为 200,相应时间 10 ms,返回结果渲染正常。这就说明路由已经正确配置了。

到这里路由配置过程就已经结束了。相关代码已经提交到了 Github 的示例项目上,最后一次 commit 的注释为“Finish URL”。

Copyright © Marvolo 2021 all right reserved,powered by Gitbook该文章修订时间: 2022-02-22 12:01:22

results matching ""

    No results matching ""