博客信息

Python Django 视图层(重定向、错误页面定制)

发布时间:『 2019-08-17 04:52』  博客类别:Python  阅读(598)

重定向基本知识

#### HttpRequest请求对象(只读)
- 当用户访问一个视图函数时,Django会创建一个request对象(HttpRequest)
- HttpRequest对象中封装了所有的Http协议中的请求信息

#### 常见属性和方法
```
HttpRequest.scheme:返回协议类型(http/https)
HttpRequest.body:返回请求实体内容
HttpRequest.path:返回请求地址
HttpRequest.method:返回当前请求方式(GET/POST)
HttpRequest.GET:返回当前请求参数的字典QueryDict
HttpRequest.POST:返回当前请求参数的字典QueryDict
HttpRequest.COOKIES:返回客户端所有的cookie信息
HttpRequest.FILES:获取上传文件(1.要求POST请求2.enctype="multipart/form-data)
HttpRequest.META:返回请求报文信息


HttpRequest.get_host():返回请求主机名和端口号
HttpRequest.get_full_path():返回请求地址(包括请求参数)


302重定向

临时性重定向

 

301重定向

永久性重定向

 

相关代码

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^student/', include('student.urls')),
    url(r'^redirect/', include('redirect.urls')),
]


urlpatterns = {
    url(r'^r1/', views.r1_view),
    url(r'^r2/', views.r2_view),
}


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.http import HttpResponse
from django.shortcuts import render


# Create your views here.
def r1_view(request):
    # 方式1:302
    # return HttpResponseRedirect('/redirect/r2/')
    # 方式2:默认302可以转换成301
    # return redirect('/redirect/r2/',permanent='True')

    # 方式3:
    response = HttpResponse()
    response.status_code = 302
    response.setdefault('Location', '/redirect/r2/')
    return response


def r2_view(request):
    return HttpResponse('hello3')


定制错误页面

 

http://127.0.0.1:8000/redirect/r3/

上面的浏览器请求是有对应的处理视图的,但是处理视图中的showUser.html不存在,那么就应该报服务器端的错误500;

小李飞刀_Python

http://127.0.0.1:8000/redirect/sdfsfsefw

上面的浏览器请求是没有对应的处理视图的,所以一请求就应该报404错误的,这个时候我们应该跳转404错误定制页面的;

 小李飞刀_Python


相关代码

#1.在settings文件中修改
DEBUG = False
ALLOWED_HOSTS = ['*']

#2.在templates目录中创建404.html/500.html


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^student/', include('student.urls')),
    url(r'^redirect/', include('redirect.urls')),
]


urlpatterns = {
    url(r'^r1/', views.r1_view),
    url(r'^r2/', views.r2_view),
    url(r'^r3/', views.resp500_view),
}


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.http import HttpResponse
from django.shortcuts import render, redirect


# Create your views here.
def r1_view(request):
    # 方式1:302
    # return HttpResponseRedirect('/redirect/r2/')
    # 方式2:默认302可以转换成301
    # return redirect('/redirect/r2/',permanent='True')

    # 方式3:
    response = HttpResponse()
    response.status_code = 302
    response.setdefault('Location', '/redirect/r2/')
    return response


def r2_view(request):
    return HttpResponse('hello3')


# 转发到未定义的页面上去,那么自动跳转500.html中
def resp500_view(request):
    return redirect('showUser.html')


相关的html页面代码


404.html 

500.html 


over......


关键字:     Python       Django  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有