Django - - - -视图层之视图函数(views)
视图层之视图函数(views)
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。
视图函数:
一定包含两个对象:
requset---->用户请求相关的所有信息(对象)
Httpresponse---->响应字符串
一个简单的视图
下面是一个返回当前日期和时间作为HTML文档的视图:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
让我们逐行阅读上面的代码:
-
首先,我们从 django.http模块导入了HttpResponse类,以及Python的datetime库。
-
接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。
注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。
-
这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。
--------------------urls.py------------------------------ urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), url(r'^index/', views.index,), # url(r'^register/', views.register,name='reg'), ] ------------------view.py------------------------------- def login(request): if request.method=='POST': username=request.POST.get('user') password=request.POST.get('pwd') if username=='yuan' and password=='123': # return render(request,'index.html') return redirect('/index/') else: return render(request,'login.html',{'info':'账号或密码错误'}) else: return render(request,'login.html') def index(request): name='yuan' return render(request,'index.html',{'a':name}) ---------------login.html-------------------------------- <h1>登陆界面</h1> <form action="/login/" method="post"> <p>姓名 <input type="text" name="user"></p> <p>密码 <input type="password" name="pwd"></p> <p><input type="submit"></p> <p>{{ info }}</p> </form> ---------------login.html-------------------------------- <h1>个人主页</h1> <h2>hello,{{ a}}</h2>代码
首先,启动服务器后,我们进入login页面
正确输入姓名,密码后,此时执行redirect函数,结果如下
现在我们将redirect换成render,再重新走一遍看看,在login页面,正确输入姓名,密码后,结果如下:
细心的人会发现,用render函数执行后的,地址栏的地址没有变化,还是login,且页面上的{{a}}此时也没有被渲染,所以hello,后面没有内容显示!
对比render与redirect:
原因是
render: 只是返回页面内容,但是未发送第二次请求
redirect:发送了第二次请求,url更新
总结两者区别:
第一,render返回一个登陆成功后的页面,刷新该页面将回复到跳转前页面。而redirect则不会
第二,如果页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分,render返回一个登陆成功页面,不会经过url路由分发系统,也就是说,不会执行跳转后url的视图函数。这样,返回的页面渲染不成功;而redirect是跳转到指定页面,当登陆成功后,会在url路由系统进行匹配,如果有存在的映射函数,就会执行对应的映射函数。
- Django框架,Views(视图函数)
- 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性
- Django框架全面讲解 -- Django Views(视图函数)
- Django 框架之视图函数(Views)
- django views视图函数返回值 return redirect httpresponse总结
- Django 视图层之视图函数(views) 笔记
- Django学习笔记之:【通用视图 (generic views) 】
- (3) django官方教程---视图views
- python后台架构Django教程——视图views渲染
- Django入门3:视图views
- Django Class-based generic views 基于类的通用视图
- 深入Django(1): 通用视图 (generic views) [转]
- Django 视图系统(views)
- Django普通视图函数和基于类视图的分页
- Django创建模板、URL模式、创建视图函数
- 在Python的Django框架中包装视图函数
- Django创建模板、URL模式、创建视图函数
- Django中URL视图函数的一些高级概念介绍
- django项目培训站-18-form表单验证-表单验证类-视图类代替函数
- [django]入门教程2:视图开发-定义视图函数及配置相应URL