Django的记录(四) url匹配

2019-10-19  本文已影响0人  IT_小马哥

首先需要理解django对于url的路由

django对于url的路由.png

url匹配问题

假如请求为:http://127.0.0.1:8000/api/recommendation/getNewsList?param=XXX

首先在项目的urls.py将请求通过include函数下发到指定的app(这里的app为demo)中去

# 项目的urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    #路由转发
    path('api/recommendation/',include('demo.urls')),
]

在app中新建一个urls.py,然后处理路由过来的请求

#app的urls.py
app_name = "demo"
urlpatterns = [
    path('getNewsList', views.get_user_news_list, name="newsList"),
]

请求解析

HTTP协议向服务器传参有几种途径?

url规则一

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),]

其中每个参数转换器如下

也可以通过正则表达式,如下:

#请求
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather)
#处理函数
def weather(request, city, year):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')

url规则二

def qs(request):
    a = request.GET.get('a')
    b = request.GET.get('b')
    alist = request.GET.getlist('a')
    print(a)  # 3
    print(b)  # 2
    print(alist)  # ['1', '3']
    return HttpResponse('OK')

url规则三

def get_body(request):
    a = request.POST.get('a')
    b = request.POST.get('b')
    alist = request.POST.getlist('a')
    print(a)
    print(b)
    print(alist)
    return HttpResponse('OK')

request.POST只能用来获取POST方式的请求体表单数据。

url规则四

例如要获取请求体中的如下JSON数据
{"a": 1, "b": 2}
可以进行如下方法操作:

import json

def get_body_json(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6 无需执行此步
    req_data = json.loads(json_str)
    print(req_data['a'])
    print(req_data['b'])
    return HttpResponse('OK')
上一篇下一篇

猜你喜欢

热点阅读