首页 > 其他分享 >【django学习-07】视图之HttpResponse

【django学习-07】视图之HttpResponse

时间:2022-09-01 23:34:21浏览次数:63  
标签:return 07 render req 视图 home HttpResponse 模板 name

  • 前言:视图函数通过return方式返回响应数据,然后生成响应的网页内容呈现在浏览器上。

  • 视图函数主要有两种返回数据的方法

    • HttpResponse:直接返回数据到浏览器上,不能使用模板语言
    • render:页面渲染,可以使用丰富的模板语言
  • 1、render参数介绍

def render(request, template_name, context=None, content_type=None, status=None, using=None):
    """
    Return a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    content = loader.render_to_string(template_name, context, request, using=using)
    return HttpResponse(content, content_type, status)
  • request:浏览器向服务器发送的请求对象

  • template_name:模板文件名

  • context:模板上下文(模板变量)赋值,以字典格式表示

  • content_type:响应内容的数据格式

  • status:HTTP状态码

  • using:设置模板引擎,用于解析模板文件,生成网页内容

  • 2、locals()

    • 在实际开发过程中,如果视图函数传递的变量过多,在使用context就会显得不合适,而且不利于维护,因此可以使用python内置语法,locals()代替context。
#views.py
def upload(req):
    name = "xwl"
    return render(req,"upload.html",locals())

#upload.py
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ name }}</h1>
</body>
</html>
  • 3、页面跳转:redirect("路径")
    • 案例:登录成功后,跳转到首页
#blog/urls.py
from django.urls import path,re_path,include
from blog import views

urlpatterns = [
    re_path('login',views.login,name="xwl"),
    re_path('home',views.home),
]

#views.py
def login(req):
    if req.method == "POST":
        username = req.POST.get("username")
        pwd = req.POST.get("pwd")
        if username == "xwl" and pwd == "123":
            # return render(req,"home.html",{"name":username})   #跳转到home首页,但是路径没有更改,每次都需要进入home页重新登录
            return redirect("/blog/home")   #跳转到home首页,但是路径有更改,重新进入home页不需要重新登录

    return render(req,"login.html")

def home(req):
    name = "xwl"   #实际场景从数据库获取
    return render(req,"home.html",locals())

#home.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎{{ name }}登录</h1>
</body>
</html>

#login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{#<form action="/login" method="post">#}
<form action="{% url "xwl" %}" method="post">
{#    使用别名#}
    <input type="text" name="username">
    <input type="password" name="pwd">
    <input type="submit" value="submit">
</form>

</body>
</html>
  • 总结:render和redirect的区别:
    • 1 if render的页面需要模板语言渲染,需要的将数据库的数据加载到html,那么所有的这一部分,除了写在home的视图函数中,必须还要写在login中,代码重复,没有解耦。
    • 重点: url没有跳转到/home/,而是还在/login/,所以当刷新后又得重新登录。

标签:return,07,render,req,视图,home,HttpResponse,模板,name
From: https://www.cnblogs.com/xwltest/p/16648234.html

相关文章

  • 数位dp P3188 [HNOI2007]梦幻岛宝珠-Solution
    数位考虑+背包(+滚动数组)首先,我们能发现,这是一道\(n\)很小但是体积和权值都非常大的背包。但是这个题的体积有一个特殊的性质,就是他是\(a\times2^b,a\leq10\)的形......
  • SpringMVC视图
    SpringMVC中的视图SpringMVC中的视图是view接口,视图的作用是用来渲染数据,将模型model中的数据展示给用户,SpringMVC视图的种类很多,默认有转发视图:InternalResourceView和重......
  • 小技巧:在VBA中查找SAP GUI Scripts 脚本对象层次结构视图
    SAPGUIScript提供了很多功能,单靠录脚本的方法去发现有点不太灵活,查SAP官方的网页也是一种可行的办法。下面介绍通过VBA直接在本地查看,方便快捷。安装好SAPGUI以后,在......
  • C20220725T2 运动
    给定序列\(s\),求满足\(max\{s_{i,j}\}-min\{s_{i,j}\}\leqk\)的最大长度\(j-i\)。\(n\leq3\times10^6\)。(时限3s)没想到\(O(n\,log\,n)\)没有被卡掉。首先判......
  • C20220725T3 回文
    给定字符串\(s\),求\(s_{l,r}\)中回文串个数。多组询问,\(|s|\leq5000\),\(T\leq10^5\)。首先介绍\(O(n\timesT)\)的离谱做法(竟然没卡掉),先跑\(Manachar\),然......
  • C20220725T4 基因进化
    给出序列\(s\),可以进行翻转操作,使\(s_{1,i}\)翻转,但\(i\)只能递增,且有\(m\)个位置不能翻转。\(m\leqn\leq3\times10^5\),多组数据,\(T\leq100\)。对于前\(......
  • 1071. 字符串的最大公因子
    对于字符串 s和 t,只有在 s=t+...+t(t自身连接1次或多次)时,我们才认定 “t能除尽s”。给定两个字符串 str1 和 str2 。返回最长字符串 x,要求满足 x......
  • JA学习 day06 ,day07 and day08
    day06预解析对象对象的遍历对象的常用方法预解析在代码执行前,对代码进行通读并解释预解析只会对以下两种方式进行极解析1定义变量varnum=100......
  • C20220712T3 牛半仙的妹子Tree
    给定一棵树,要求执行3种操作:给树上某一结点涂色,从下一次操作起每一次向周围传染一个单位。树上所有点变为正常询问某个点是否被感染。\(n,m\leq10^5\)。首先想到暴......
  • C20220711T4 移动
    牛牛从0出发走到\(n+1\),每秒可以选择向前走一步,向后走一步或者不走,有一些时刻不让呆在某一格,求最短到达时间,\(n\leq10^5\)。这是一道很神奇的压轴题(其实并没有什么......