Django的视图函数
HttpRequest对象
request属性
django将请求报文中的请求行,首部信息,内容主体都封装在HttpRequest类中的属性
print(request.GET) # GET请求的请求数据 QUeryDict 就是返回个字典 print(request.method) # 请求方式 print(request.path) # 请求的路径 print(request.POST) # POST请求的请求数据 QUeryDict 就是返回个字典
request的常用方法: print(request.get_full_path()) # GET请求的参数的请求路径,包含?后面的 print(request.is_ajax()) # 判断是不是ajax,返回布尔值
print(request.META) ''' 一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例: CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。 CONTENT_TYPE —— 请求的正文的MIME 类型。 HTTP_ACCEPT —— 响应可接收的Content-Type。 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。 HTTP_HOST —— 客服端发送的HTTP Host 头部。 HTTP_REFERER —— Referring 页面。 HTTP_USER_AGENT —— 客户端的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 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_ 前缀。 所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。 '''
HttpResponse对象
影响兑现的树妖三种形式:
- HttpResponse()
- render()
- redirect()
render()
render(request, template_name, context=None)
参数:
request:用于生成响应的请求对象
template_name: 要使用的模板的完成名称(xxx.html文件)
context:添加到模板上下文的一个字典
render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体,
浏览器不认识{{ 变量名}}、{% 别名 %}这些,都是在render里面解析完之后响应给了浏览器
redirect()
重定向,浏览器第一次请求后,经过逻辑处理,返回一个redirect(新地址),浏览器会重新发送一次请求给给新地址
views.py文件:
def login(request): if request.method == 'POST': user = request.POST.get('user') pwd = request.POST.get('pwd') if user == 'xiaofei' and pwd == '123': return redirect('/index/') return render(request,'login.html')
uels文件:
urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('login/', views.login), ]
login.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用户名 <input type="text" name="user"> 密码 <input type="password" name="pwd"> <input type="submit"> </form> </body> </html>
关于301和302状态码解释:
1)301和302的区别。
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取
(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 SEO302好于301
2)重定向原因:
(1)网站调整(如改变网页目录结构);
(2)网页被移到一个新地址;
(3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的
网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
在settings.py文件中设置APPEND_SLASH = None:
意思是在浏览器框中输入的路径必须要与urls.py文件中设置的路径要一致,不能多写/或者少写/,必须要与设置的路径保持一致

浙公网安备 33010602011771号