您的位置:首页 > 编程语言 > Go语言

Django - - - -视图层之视图函数(views)

2017-10-23 20:27 615 查看

视图层之视图函数(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路由系统进行匹配,如果有存在的映射函数,就会执行对应的映射函数。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: