接上文
请求响应对象
请求 HttpRequest
request对象中包含了请求方式请求头等信息,访问方式如下:
python
def http_request(request):
print(request.method) # 获取请求方式
header = request.META # 获取请求头信息
print(header)
ua = request.META.get("HTTP_USER_AGENT", None)
print(ua) # 获取请求头信息的内容
# 获取请求参数
name = request.GET.get("name", "无数据")
print(name)
return HttpResponse("http request success")
request.META是一个字典,也可以使用request.META["HTTP_USER_AGENT"]访问。
服务器根据浏览器发送的请求进行响应。
响应HttpResponse
自定义响应状态码
python
resp = HttpResponse("响应状态码内容字符串", status=201)
# eg:
resp = HttpResponse("登录失败", status=601)
向cookie添加信息
cookie是浏览器存放在用户本地的信息,浏览器关闭cookie删除。也可以自定义cookie的生存时间。
cookie中的数据以key:value的形式存储,set_cookie方法第一个参数是key,第二个是value。
python
resp = HttpResponse("响应cookie")
# 设置cookie值
resp.set_cookie("username","hd")
resp.set_cookie("pwd","hddd")
cookie通过max_age参数设置过期时间。多个cookie只在一行上加即可。
python
resp.set_cookie("username","hd", max_age=7*24*60*60)
JsonResopnse
响应JSON格式数据#JSON是前后端传递数据的标准格式数据内容由key:value组成,在json可以通过符号表示对象及列表。
包含的数据类型:字符、数字、布尔、对象、列表。如下:
python
from django.http import HttpResponse, JsonResponse
def http_response(request):
user_info ={
id:1,
name:"阿巴阿巴",
like:["唱","跳","rap","篮球"]
}
return JsonResponse(user_info)
FileResponse
用文件做为请求的响应,传输不符合浏览器标准的文件
python
response = FileResponse(open("a.txt","rb"))
return response
重定向
重定向可以跳转到另一个页面
在demo中访问article_detail时如果参数的id大于1000就会重定向到no_data_404上
python
def no_data_404(request):
return HttpResponse("404")
def article_detail(request, article_id):
if article_id > 1000:
return HttpResponseRedirect("/hello/404/") # 重定向至站点内部视图名 如果id大于1000则表示文章不存在,重定向至404页面
# return redirect("http://www.baidu.com") # 重定向到内部视图名或url地址或外部资源
return HttpResponse(f"article{article_id}")
重定向有两种方法,HttpResponseRedirect("内部url") 或 redirect("http://www.baidu.com")。
HttpResponseRedirect方法可以访问网站内部资源,redirect可以访问外部资源。
记得加return!!!!!!!!!!!!!!!!!!
重写内置视图
视图函数
这里我们写在hello模块中
python
def page_500(request):
return HttpResponse("错误500")
修改默认页面的指向
在主模块的urls中添加一个变量
python
urlpatterns = []
handler500 = 'hello.views.page_500'
配置setting中的debug
27行左右
python
DEBUG = False
这样出现500错误就会跳转到我们自定义的页面了。
测试
随便找一个视图函数让它触发异常
raise是触发异常的代码
python
def render_str(request):
raise
return render(request, "index.html")
访问这个视图的时候就会发生错误,然后跳转到自定义的500页面。
django的内置视图
- handler404
- handler500
- handler403
- handler400
静态资源
配置静态资源
在项目文件夹下创建一个静态资源文件夹,这个文件夹专门用来存放静态资源(图片等)
打开主项目的setting
MEDIA_URL 用于配置访问地址,如此文件夹中放有1.jpg 则在浏览器中访问127.0.0.1:8000/media/1.jpg
MEDIA_ROOT 用于配置静态资源存放的地址,以下代码含义是当前项目根目录下的medias文件夹。
python
MEDIA_URL = "/media/" # 配置资源目录访问地址
MEDIA_ROOT = os.path.join(BASE_DIR,"medias") # 存放静态资源目录
打开urls,在最后添加上如下代码即可在浏览器中直接访问静态资源了(前提是在debug模式下)
python
from django.views.static import serve
from test_django import settings
if settings.DEBUG:
urlpatterns += [
re_path(r"^media/(?P<path>.*)$",
serve, {
"document_root": settings.MEDIA_ROOT
}
),
]
用class重写视图
写一个类继承TemplateView,设置属性template_name 为template中的一个html文件,一个类视图就创建好了。
python
from django.views.generic import TemplateView
class HomeView(TemplateView):
template_name = "home.html"
urls配置如下:
as.view()可以将类转换成视图
python
path('homeview/', HomeView.as_view(), name='HomeView'),