第3天:视图提取请求参数

客户端传参的几种方式

  1. 通过URL路径传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:新闻类别id和页码
  2. 通过query string查询字符串传递,例如:http://127.0.0.1:8000/news?category=1&page=2
  3. 通过body请求体传递,又可根据数据格式,分为 键值对,表单数据,非表单数据(json,xml)
  4. 通过http协议请求头(header)传递

获取URL路径中的参数

需求:

  1. 在服务器端视图中,获取URL路径传递过来的参数
  2. 例如:对于请求URL http://127.0.0.1:8000/news/1/2,需要获取URL路径中的数值1(类别id)和2(页码)

解决:

  1. 在配置URL时,可以使用正则表达式匹配URL中的参数
  2. 需要使用小括号把要匹配的值变为正则的一个组,可以对组命名,也可以不命名
  3. 当匹配成功后,Django会自动匹配成功的值,作为一个方法参数传递到视图函数中

代码参考:

  ①未命名参数(位置参数):按定义顺序传递

# 在项目下urls.py文件中配置
url(r'^news/(\d+)/(\d+)$', users.views.news),

#在users.views.py中定义
def news(request, a, b):
    return HttpResponse('显示新闻:{} {}'.format(a, b))

  ②命名参数(关键字参数):按定义的组名传递

# 在项目下的urls.py文件中配置
url(r'^news/(?P<category>\d+)/(?P<page>\d+)$', users.views.news),

#在users.views.py文件中定义
def news(request, category, page):
    return HttpResponse('显示新闻:{} {}'.format(category, page))

获取查询字符串参数

需求:

  获取URL地址 http://127.0.0.1:8000/news?categeory=1&page=2中的查询字符串的值

代码参考:

# url配置
url(r'^news/$', users.views.news),

# 视图函数
def news(request):
    category = request.GET.get('category')
    page = request.GET.get('page')
    text = '获取查询字符串:<br/> category={}, page={}'.format(category, page)
    return HttpResponse(text)

重要:查询字符串不却分请求方式,即使客户端通过POST方式发起请求,依然可以通过request.GET获取请求中的查询字符串数据

获取请求体数据

请求体数据格式不固定,可以是表单类型字符串,可以是JSON字符串,可以是XML字符串,应区别对待。

可以发送的请求体数据的 请求方式有POSTPUTPATCHDELETE

Django对POST、PUT、PATCH、DELETE请求方式开启了CSRF安全防护,为了方便测试,可以在settings.py文件中注释掉CSRF中间件,关闭CSRF防护

获取表单数据 Form Data()键值对

前端发送的表单或键值对类型的请求体数据,可以通过request.POST属性获取

# url配置
url(r'^news/$', users.views.news),

# 视图函数
def news(request):
    category = request.POST.get('category')
    page = request.POST.get('page')
    text = '获取body中的键值对:<br/> category={}, page={}'.format(category, page)
    return HttpResponse(text)

使用Postman发送表单数据

重要:request.POST只能用来获取POST方式的请求体表单数据或键值对数据。如果为非请求提交的请求体数据,或者是请求体数据类型为非表单或非键值对数据,则需要通过request.body属性获取提交的数据后自己解析

非表单类型None-Form Data

猜你喜欢

转载自www.cnblogs.com/sellsa/p/10337399.html