锋哥原创的Python Web开发 Django5视频教程:
2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/客户端请求后端服务,在view.py视图层方法最终return 返回视图响应。Python内置提供了响应类型,来实现不同的返回不同的http状态码;
响应类型 | 解释说明 |
---|---|
HttpResponse('Hello world'") | 状态码200,请求已成功被服务器接收 |
HttpResponseRedirect('/') | 状态码302,重定向首页地址 |
HttpResponsePermanentRedirect('/') | 状态码301,永久重定向首页地址 |
HttpResponseBadRequest("'400') | 状态码400,访问的页面不存在或请求错误 |
HttpResponseNotFound('404") | 状态码404,网页不存在或网页的URL失效 |
HttpResponseForbidden('403') | 状态码403,没有访问权限 |
HttpResponseNotAllowed('405') | 状态码405,不允许使用该请求方式 |
HttpResponseServerError('500'") | 状态码500,服务器内容错误 |
JsonResponse( {'foo' : 'bar'}) | 默认状态码200,响应内容为JSON数据 |
StreamingHttpResponse() | 默认状态码200,响应内容以流式输出 |
下面我们举几个例子来实操下视图响应状态应用;
举例一:HttpResponse
修改helloWorld的views.py的index函数:
def index(request):
html = "<font color='red'>学Python,上www.python222.com</font>"
return HttpResponse(html, status=200)
请求测试,状态码200,返回网页信息。status=200不写的话默认也是200.
举例二:HttpResponseNotFound 404
def index(request):
return HttpResponseNotFound()
请求测试,状态码404。
举例三:JsonResponse 响应json数据
def index(request):
return JsonResponse({'foo': 'bar'})
请求测试,状态码200,返回json格式数据。
我们第一个实例用到的是HttpResponse,简单网页我们直接可以响应到页面,但是假如是复杂网页,就会增加视图函数的代码量。所以我们引入模版,通过django提供的render方法渲染数据到模版,然后再响应到页面。
def index(request):
return render(request, 'index.html')
这个是我们前面的的HelloWorld代码,我们ctrl点进去render方法,看下源码:
经过模版渲染后得到content网页内容,依然返回的是HttpResponse对象。
render方法定义:
def render(
request, template_name, context=None, content_type=None, status=None, using=None
):
request和template_name是必须的参数。其他参数可选。
- request:浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方式等。
- template_name:设置模板文件名,用于生成网页内容。
- context:对模板上下文(模板变量)赋值,以字典格式表示,默认情况下是一个空字典。
- content_type:响应内容的数据格式,一般情况下使用默认值即可。
- status: HTTP状态码,默认为200.
- using:设置模板引擎,用于解析模板文件,生成网页内容。
我们再写一个带字典参数的render渲染模版实例:
views.py改写下:
def index(request):
content_value = {"msg": '学Python,上www.python222.com'}
return render(request, 'index.html', context=content_value)
模版代码改写下,模版里取值语法 {{ 字典的key值 }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
模版取值: {{ msg }}
</body>
</html>
请求测试: