对参数的校验,第一种方式,在视图函数中,通过编写正则的方式进行验证,不具备复用性。第二种方式,转换器,复用性较强,也可以自定义转换器
第一种方式:视图函数中,编写正则
book/views.py中
from django.shortcuts import render
from django.http import HttpResponse
from book.models import BookInfo
import json,re
# Create your views here.
def create_book(request):
book = BookInfo.objects.create(
name = 'abc',
pub_data = '2000-1-1',
readcount = 10
)
return HttpResponse('create')
def shop(request,city_id,mobile):
# 获取url传过来的参数
# <QueryDict: {'order': ['readcount'], 'page': ['1']}>
# QueryDict具有字典的特性,还具有一键多值
if not re.match('\d{5}',mobile):
return HttpResponse("没有此商品")
query_params = request.GET
print("query_params",query_params)
order = query_params.getlist("order")
print("order的请求参数为:",order)
return HttpResponse('齐哥的饭店')
第二种方式,转换器的使用
book/urls.py
from django.urls import path
from book.views import create_book,shop,register,jsons
from django.urls import converters
from django.urls.converters import register_converter
# 第一步.定义转换器
class MobileConverter:
# 验证数据的关键是:正则
regex = '1[3-9]\d{9}'
# 验证没有问题的数据,给视图函数
def to_python(self, value):
return value
# def to_url(self, value):
# # 将匹配结果用于反向解析传值时使用
# return value
# 第二步.注册转换器,才能在第三步中使用
# 参数讲解
#converter :转换器类
#type_name :转换器名字
register_converter(MobileConverter,'phone')
urlpatterns = [
path('create/',create_book),
# <转换器名字:变量名>
# 转换器会对变量数据进行正则验证
# 第三步,使用
# int为系统自带转换器,python为自定义编写的转换器
path('<int:city_id>/<phone:mobile>/',shop),
path('register/',register),
path('json/',jsons),
]
接口请求,验证成功
网友评论