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

Django的视图层

2018-07-03 12:48 330 查看

一、视图函数

  一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且必须返回Web响应。

  响应内容可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。

  代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。

  下面的例子是在路由控制中写下视图函数:

from django.contrib import admin
from django.urls import path,re_path

# 视图函数放在urls.py中
from django.shortcuts import HttpResponse

def index(request):

return HttpResponse("OK")

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r"index/", index)    # index(request),request是所有的请求对象
]

  在浏览器访问http://127.0.0.1:8000/index/,页面显示OK。

  但是为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。如下所示:

from django.shortcuts import render

# Create your views here.

from django.shortcuts import HttpResponse

def index(request):

return HttpResponse("OK")
views_demo/app01/views.py

  此时URL控制器中要找到视图函数,需要引入views.py:

from django.contrib import admin
from django.urls import path,re_path

from app01 import views

urlpatterns = [
path('admin/', admin.site.urls),

re_path(r"index/", views.index)    # index(request),request是所有的请求对象
]
views_demo/views_demo/urls.py

下面是一个返回当前日期和时间作为HTML文档的视图:

from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
import datetime

def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)

逐行解读上面的代码:

  首先,从 django.shortcuts模块导入了HttpResponse类,以及Python的datetime库。

  接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。

注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。

  最后,这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。

  

1)301和302的区别。

  301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取
(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。

  他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;

  302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 SEO302好于301

2)重定向原因:
(1)网站调整(如改变网页目录结构);
(2)网页被移到一个新地址;
(3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的
网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
关于301与302   用redirect可以解释APPEND_SLASH的用法!

  注意:render和redirect的区别:

  1)if 页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分。

  2)the most important: url没有跳转到/yuan_back/,而是还在/login/,所以当刷新后又得重新登录。

 

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