赞
踩
Django视图对请求做出响应经常用到Http Response()、render()、redirect() 3个函数,它们被称为视图函数的“三剑客”
render()函数由django.shortcuts模块提供,其功能是根据模板文件和传给模板文件的字典类型的变量,生成一个Http Response对象并返回。
函数格式为
render(request, template_name, context=None,content_type=None, status=None)
复制代码
request:位置参数,代表传给视图函数的Web请求,封装了请求头的所有数据,其实就是视图参数request。
template_name:必选位置参数,指的是要使用的模板文件的名称,一般是放在templates目录下的HTML文件。
context:可选参数,数据是字典类型,默认是一个空字典,保存要传到HTML文件中的变量。
content_type:可选命名参数,用于设置生成的文档的MIME(MultipurposeInternet Mail Extension,多用途互联网邮件扩展)类型。默认为DEFAULT_CONTENT_TYPE的值text/html。
status:可选参数,表示响应的状态代码,默认为200。
例子:
from django.shortcuts import renderdef test_view(request):
# 视图的代码写在这里
def xxx(request):
xxxxxxx
return render(request, 'index.html', {'welcome': 'hello world!'} ,content_type='text/html')
# 传递变量名为welcome值为'hello world!'的变量
复制代码
redirect()函数接收一个参数,表示让浏览器跳转到指定的 URL;这个参数可以是数据模型(Model)对象、视图函数名称或URL。
redirect()函数将调用数据模型中定义的get_absolute_url()函数,并取得该函数返回的URL值,然后跳转到该URL。
例子
urls.py:
.....
path('dep/<int:dep_id>/',views.depdetail,name='depdetail'),
path('test_redirect/',views.test_redirect),
....
复制代码
models.py:
#导入数据模块 from django.db import models # 导入反向解析函数 from django.urls import reverse # 部门数据模型(部门数据表) class department(models.Model): # 部门名称,为字符类型 dep_name=models.Char Field(max_length=32,verbose_name='部门名称',unique=True, blank=False) # 部门备注说明 dep_script=models.Char Field(max_length=60,verbose_name='备注',null=True) # 数据模型的get_absolute_url()方法 def get_absolute_url(self): # 反向解析URL,解析成/dep/ self.pk / return reverse('depdetail',kwargs={'dep_id':self.pk}) # 在数据模型department中定义了一个函数get_absolute_url(),该函数返回一个URL。 复制代码
reverse()是URL反向解析函数,它的第一个参数的值是’depdetail’,它是名字为depdetail的URL配置项。reverse的解析过程是:找到当前应用test_view下urls.py中名字为depdetail的配置项,reverse()函数会找到对应的URL,根据传给它的字典类型参数(kwargs={‘dep_id’:self.pk})进行组合,最终解析生成完整的URL。
views.py:
from django.shortcuts
import render,Http Response,redirect
from . import models
def depdetail(request,dep_id):
# 根据传入的参数值取出一条记录
obj=models.department.objects.get(id=dep_id)
# 返回Http Response对象
return Http Response('部门:'+obj.dep_name+',备注:'+obj.dep_script)
def test_redirect(request):
obj=models.department.objects.get(id=1)
# 用redirect()重定向,参数是数据模型对象,所以重定向到数据模型get_absolute_url生成的URL
# 这个URL对应视图函数views.depdetail(),实际上调用这个函数
return redirect(obj)
复制代码
视图函数test_redirect()中有一个redirect()函数,这里的redirect()函数运行流程分为以下3步。
redirect()函数通过视图函数名称和视图函数参数反向解析出URL并重定向到这个URL。下面的代码传入了一个视图函数名称depdetail和参数
def test_redirect(request):
# 视图函数depdetail()有参数dep_id
return redirect('depdetail',dep_id=2)
复制代码
这里的redirect()函数的执行过程是首先反向解析出URL,到urls.py文件中找到URL对应的视图函数,执行视图函数depdetail()。在外部看可以这样理解,通过redirect()直接调用了视图函数depdetail()。
redirect()函数直接打开这个URL指向的网页。参数有http://作前缀,才算完整的URL,如:return redirect(‘http://127.0.0.1:8000/dep/2/')和return%25E5%2592%258Creturn "http://127.0.0.1:8000/dep/2/’)%E5%92%8Creturn") redirect(‘http://网址/')。%25E3%2580%2582 "http://%E7%BD%91%E5%9D%80/’)%E3%80%82")
但不带http://和https://时,redirect()函数会到urls.py文件中寻找匹配,如果有匹配就定向到这个URL并执行对应的视图函数,如果没有匹配则直接重定向到这个地址。
目前python前景最好,学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。下面有一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。