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”。