视图的第一个参数必须是HttpRequest对象

在视图函数中,接收的request有如下属性:

  • path:一个字符串,表示请求的页面的完整路径,不包含域名。
  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
    • 在浏览器中给出地址发出请求采用get方式,如超链接。
    • 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
  • encoding:一个字符串,表示提交的数据的编码方式。
    • 如果为None则表示使用浏览器的默认设置,一般为utf-8。
    • 这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
  • GET:一个类似于字典的对象,包含get请求方式的所有参数。
  • POST:一个类似于字典的对象,包含post请求方式的所有参数。
  • FILES:一个类似于字典的对象,包含所有的上传文件。
  • COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。
  • session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见"状态保持"。

 

QueryDict对象

GET和POST请求中,视图request获取的QueryDic对象:

  • 定义在django.http.QueryDict
  • HttpRequest对象的属性GET、POST都是QueryDict类型的对象
  • 与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
  • 方法get():根据键获取值
  • 如果一个键同时拥有多个值将获取最后一个值
  • 如果键不存在则返回None值,可以设置默认值进行后续处理
dict.get('键',默认值)
#可简写为
dict['键']
  • 方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值
  • 如果键不存在则返回空列表[],可以设置默认值进行后续处理
dict.getlist('键',默认值)

GET属性

请求格式:在请求地址结尾使用?,之后以“键=值”的格式拼接,多个键值对之间以&连接。

例:网址如下

http://www.itcast.cn/?a=10&b=20&c=python

其中的请求参数为:

a=10&b=20&c=python
  • 分析请求参数,键为'a'、'b'、'c',值为'10'、'20'、'python'。
  • 在Django中可以使用HttpRequest对象的GET属性获得get方方式请求的参数。
  • GET属性返回QueryDict类型的对象,键和值都是字符串类型。
  • 键是开发人员在编写代码时确定下来的。
  • 值是根据数据生成的。

POST属性

使用form表单请求时,method方式为post则会发起post方式的请求,需要使用HttpRequest对象的POST属性接收参数,POST属性返回QueryDict类型的对象。

问:表单form如何提交参数呢?

答:控件name属性的值作为键,value属性的值为值,构成键值对提交。

  • 如果控件没有name属性则不提交。
  • 对于checkbox控件,name属性的值相同为一组,被选中的项会被提交,出现一键多值的情况。
  • 键是控件name属性的值,是由开发人员编写的。
  • 值是用户填写或选择的。

接收POST和GET请求获取数据的方式:

#接收请求参数
def show_reqarg(request):
if request.method == 'GET':
a = request.GET.get('a') #获取请求参数a
b = request.GET.get('b') #获取请求参数b
c = request.GET.get('c') #获取请求参数c
return render(request, 'booktest/show_getarg.html', {'a':a, 'b':b, 'c':c})
else:
name = request.POST.get('uname') #获取name
gender = request.POST.get('gender') #获取gender
hobbys = request.POST.getlist('hobby') #获取hobby
return render(request, 'booktest/show_postarg.html', {'name':name, 'gender':gender, 'hobbys':hobbys})

最新文章

  1. css强制换行和超出隐藏实现
  2. 使用 Git 来管理 Xcode 中的代码片段
  3. 读书笔记——《图解TCP/IP》(1/4)
  4. junit适配器模式应用
  5. The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
  6. Windows下cmd的替代软件——PowerCmd
  7. Oracle Data Guard PING[ARC2]: Heartbeat failed to connect to standby ''. Error is 12514 故障分析
  8. Kettle的集群排序 2——(基于Windows)
  9. 你应该了解的 7个Linux ls 命令技巧
  10. 远程复制 scp命令
  11. jqGrid一些操作
  12. maven初步入门demo
  13. 使用Stardict命令行版本sdcv
  14. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
  15. Java-Maven(五):Eclipse&Maven下创建java工程&web工程
  16. Android Handler机制剖析
  17. python GUI图形化编程-----wxpython
  18. PHPcms 缓存的读取和设置
  19. [转]python 装饰器
  20. [z]protobuf实现c++与java之间的数据传递,beancopy数据到前台

热门文章

  1. phpstorm激活码生成器地址
  2. spring boot整合log4j2
  3. 使用netty的第一个Hello World
  4. java 多线程(总结)
  5. New Windows 10 SDK - Multi-instance UWP apps
  6. java创建运行以及项目结构
  7. AndroidStudio R 文件标红
  8. 桶排序/基数排序(Radix Sort)
  9. 排序算法Java实现(选择排序)
  10. 【Bootstrap】 bootstrap-table表格组件