宜昌皓月建设工程有限公司网站,苏州免费网页制作模板,做百度企业网站有什么好处,网站设计能出来什么一、请求与响应
视图函数
视图函数#xff0c;简称视图#xff0c;属于Django的视图层#xff0c;默认定义在views.py文件中#xff0c;是用来处理web请求信息以及返回响应信息的函数#xff0c;所以研究视图函数只需熟练掌握两个对象即可#xff1a;请求对象(HttpRequ…一、请求与响应
视图函数
视图函数简称视图属于Django的视图层默认定义在views.py文件中是用来处理web请求信息以及返回响应信息的函数所以研究视图函数只需熟练掌握两个对象即可请求对象(HttpRequest)和响应对象(HttpResponse) 1、请求对象
当一个页面被请求时django会创建一个包含本次请求原信息如http协议请求报文中的请求行、首部信息、内容主体的HttpRequest对象。
之后django会找到匹配的视图将该对象传给视图函数的第一个参数约定俗称该参数名为request类似于我们自定义框架的environ参数。
在视图函数中通过访问该对象的属性便可以提取http协议的请求数据
2、HttpRequest对象属性part1
一.HttpRequest.method获取请求使用的方法值为纯大写的字符串格式。例如GET、POST应该通过该属性的值来判断请求方法在视图函数中if request.method. GET:...if request.method POST:...二.HttpRequest.GET值为一个类似于字典的QueryDict对象封装了GET请求的所有参数可通过HttpRequest.GET.get(键)获取相对应的值在视图函数中request.GET.get(name)三.HttpRequest.POST值为一个类似于字典的QueryDict对象封装了POST请求所包含的表单数据可通过HttpRequest.POST.get(键)获取相对应的值在视图函数中request.POST.get(name)针对表单中checkbox类型的input标签、select标签提交的数据键对应的值为多个需要用HttpRequest.POST.getlist(hobbies)获取存有多个值的列表,同理也有HttpRequest.GET.getlist(键)针对有多个值的的情况也可以用HttpRequest.GET.get(键)默认会获取列表中的最后一个值
案例
urls.py
from django.urls import re_path
from app01 import viewsurlpatterns [re_path(r^login/$,views.login),
] Views.py
from django.shortcuts import render,HttpResponsedef login(request):if request.method GET:# 当请求url为http://127.0.0.1:8001/login/?a1b2c3c4c5# 请求方法是GET?后的请求参数都存放于request.GET中print(request.GET)# 输出QueryDict: {a: [1], b: [2], c: [3, 4, 5]}# 获取后参数的方式为arequest.GET.get(a) # 1brequest.GET.get(b) # 2crequest.GET.getlist(c) # [3, 4, 5]c1request.GET.get(c) # 5return render(request,login.html)elif request.method POST:# 在输入框内输入用户名egon、年龄18选择爱好点击提交# 请求方法为POST表单内的数据都会存放于request.POST中print(request.POST) # 输出QueryDict: {..., name: [egon], age: [18], hobbies: [music, read]}# 获取表单中数据的方式为namerequest.POST.get(name) # egonagerequest.POST.get(age) # 18hobbiesrequest.POST.getlist(hobbies) # [music, read]return HttpResponse(提交成功) 在templates目录下新建login.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title登录页面/title
/head
body!--
methodpost代表在提交表单时会以POST方法提交表单数据
action/login/ 代表表单数据的提交地址为http://127.0.0.1:8001/login/,可以简写为action/login/,或者action
--
form actionhttp://127.0.0.1:8001/login/ methodpost{% csrf_token %} !--强调必须加上这一行后续我们会详细介绍--p用户名input typetext namename/pp年龄input typetext nameage/pp爱好input typecheckbox namehobbies valuemusic音乐input typecheckbox namehobbies valueread阅读input typecheckbox namehobbies valuedancing跳舞/ppinput typesubmit value提交/p/form
/body
/html
3、HttpRequest对象属性part2
一.HttpRequest.path获取url地址的路径部分只包含路径部分二.HttpRequest.get_full_path()获取url地址的完整path既包含路径又包含参数部分如果请求地址是http://127.0.0.1:8001/order/?nameegonage10#_label3
HttpRequest.path的值为/order/
HttpRequest.get_full_path()的值为/order/?nameegonage10
案例
urls.py
from django.urls import path,register_converter,re_path
from app01 import viewsurlpatterns [re_path(r^order,views.order),
]
views.py
from django.shortcuts import render,HttpResponse# 针对请求的url地址http://127.0.0.1:8001/order/?nameegonage10#_label3
# 从域名后的最后一个“/”开始到“”为止是路径部分即/order/
# 从“”开始到“#”为止之间的部分为参数部分,即nameegonage10
def order(request):print(request.path) # 结果为“/order/”print(request.get_full_path()) # 结果为/order/?nameegonage10return HttpResponse(order page)
4、HttpRequest对象属性part3
一.HttpRequest.META.get(...)值为包含了HTTP协议的请求头数据的Python字典字典中的key及期对应值的解释如下CONTENT_LENGTH —— 请求的正文的长度是一个字符串。CONTENT_TYPE —— 请求的正文的MIME类型。HTTP_ACCEPT —— 响应可接收的Content-Type。HTTP_ACCEPT_ENCODING —— 响应可接收的编码。HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。HTTP_HOST —— 客服端发送数据的目标主机与端口HTTP_REFERER —— Referring 页面。HTTP_USER_AGENT —— 客户端使用的软件版本信息QUERY_STRING —— 单个字符串形式的查询字符串未解析过的形式。REMOTE_ADDR —— 客户端的IP地址。REMOTE_HOST —— 客户端的主机名。REMOTE_USER —— 服务器认证后的用户。REQUEST_METHOD —— 一个字符串例如GET 或POST。SERVER_NAME —— 服务器的主机名。SERVER_PORT —— 服务器的端口是一个字符串。从上面可以看到除 CONTENT_LENGTH 和 CONTENT_TYPE 之外HTTP协议的请求头数据转换为 META 的键时都会1、将所有字母大写2、将单词的连接符替换为下划线3、加上前缀HTTP_。所以一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。二、HttpRequest.encoding一个字符串表示提交的数据的编码方式如果为 None 则表示使用 DEFAULT_CHARSET 的设置默认为 utf-8。这个属性是可写的你可以修改它来修改访问表单数据使用的编码。接下来对属性的任何访问例如从 GET 或 POST 中读取数据将使用新的 encoding 值。如果你知道表单数据的编码不是 DEFAULT_CHARSET 则使用它。三、HttpRequest.scheme表示请求方案的字符串通常为http或https四、其他
HttpRequest还有很多其他重要属性比如HttpRequest.body待我们讲到专门的知识点时再专门详细讲解
5、响应对象
请求对象HttpRequest是由django为我们创建好的直接使用即可而响应对象则需要我们负责创建。我们编写的每个视图都应该返回一个HttpResponse对象响应可以是一个网页的HTML内容一个重定向一个404错误一个XML文档或者一张图片。用来返回响应对象的常用类如下
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
from django.shortcuts import renderfrom django.http importJsonResponse
6、HttpResponse
from django.http import HttpResponse
response HttpResponse(Heres the text of the Web page.)
response HttpResponse(Text only, please., content_typetext/plain)
psContent-Type用于指定响应体的MIME类型MIME类型
mime类型是多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开MIME 类型有非常多种一般常见的有text/html浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。text/plain意思是将文件设置为纯文本的形式浏览器在获取到这种文件时并不会对其进行处理。image/jpegJPEG格式的图片image/gifGIF格式的图片video/quicktimeApple 的 QuickTime 电影application/vnd.ms-powerpoint微软的powerpoint文件7、render
def render(request, template_name, contextNone, content_typeNone, statusNone, usingNone):Return a HttpResponse whose content is filled with the result of callingdjango.template.loader.render_to_string() with the passed arguments.content loader.render_to_string(template_name, context, request, usingusing)return HttpResponse(content, content_type, status)参数1、request用于生成响应的请求对象固定必须传入的第一个参数2、template_name要使用的模板的完整名称必须传入render默认会去templates目录下查找模板文件3、context可选参数可以传入一个字典用来替换模块文件中的变量默认是一个空字典。如果字典中的某个值是可调用的视图将在渲染模板之前调用它。4、content_type生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。默认为text/html5、status响应的状态码。默认为200。6、using: 用于加载模板的模板引擎的名称。 8、redirect
返回重定向对象返回的状态码为302第一个参数用来指定浏览器重定向的地址可以是
#1、一个完全标准的URL地址如https://www.yahoo.com/search/
#2、也可以是一个没有域名的绝对路径如/search/
#3、或者是一个没有域名的相对路径如search/,与1、2直接跳转到指定的绝对路径不同相对路径需要先与当前路径进行拼后才能跳转例如如果当前路径为http://127.0.0.1:8080/index/拼接后的路径为http://127.0.0.1:8080/index/search/# psredirect重定向等同于下述操作
def index(request):responseHttpResponse()response.status_code302 # 必须设置响应的状态码才能重定向response[Location]/register/ # 设置响应头return response
9、JsonResponse
向前端返回一个json格式字符串的两种方
方式一
import jsondef my_view(request):data[egon,kevin]return HttpResponse(json.dumps(data) )
方式二
from django.http import JsonResponsedef my_view(request):data[egon,kevin]return JsonResponse(data,safeFalse)#默认safeTrue代表只能序列化字典对象safeFalse代表可以序列化字典以外的对象