【玩转全栈】----Django模板语法、请求与响应 - 指南

news/2025/12/9 13:19:50/文章来源:https://www.cnblogs.com/gccbuaa/p/19326110

目录

一、引言

二、模板语法

三、传参

1、视图函数到模板文件

2、模板文件到视图函数

四、引入静态文件

五、请求与响应

?1、请求

2、响应

六、综合小案例

1、源码展示

2、注意事项以及部分解释

3、展示


一、引言

像之前那个页面,太过简陋,而且一个完整的页面,也不可能只用HttpResponse返回文本,这就可以用django的模板语法,模板语法相当于将前后端分离了,前端专写页面,写成一个html文件,然后后端在视图函数中可以通过渲染(render)将前端的html文件渲染为HTTP响应。

app文件目录如下:

app01
│ ├─migrations
│ │ └─__pycache__
│ ├─static
│ │ ├─css
│ │ ├─img
│ │ ├─js
│ │ └─plugins
│ ├─templates
│ └─__pycache__
└─myproject
└─__pycache__

static文件夹用来存放静态文件,包括样式css,图片img,网页的js和插件plugins

而templayes是用来存放模板的,一些编写的html文件通常存放于此

二、模板语法

模板语法如何实现呢,其实很简单,首先得创建一个html文件,对网页进行设计,然后在视图函数中进行返回即可。

新建html文件:

此文件即可和前端联系起来,可以在这儿简单写个页面

展示

配置路径

path("show/", views.show_1),

在视图函数中返回该页面

def show_1(request):return render(request, 'show_1.html')

返回页面是用的render,第二个参数就是要显示的html文件

启动项目后显示了“展示”,当然,有前端基础的同学就可以尽情发挥,设计一个更加完善的页面

基本功能

返回指定内容作为 HTTP 响应

渲染模板文件并返回包含动态内容的 HTTP 响应

返回一个 HTTP 重定向响应,将用户跳转到另一个 URL

常用场景

用于返回简单的字符串、HTML 或其他内容

用于返回包含动态页面的完整 HTML 响应

用于重定向用户到其他页面(如成功后的跳转)

返回内容类型

文本、HTML、JSON 或其他任意内容

渲染后的 HTML 内容

重定向响应,浏览器跳转到目标 URL

函数参数

内容(如字符串或 HTML 代码)

request、模板文件路径、上下文数据(字典)

URL 名称、URL 路径或视图名称

返回对象

HttpResponse 对象

HttpResponse 对象(经过模板渲染的 HTML)

HttpResponseRedirect 对象

三、传参

模板文件和视图函数可以进行相互传参,主要通过 上下文数据(Context) 进行传递。以下是详细说明:

1、视图函数到模板文件

视图函数传参到模板文件只需添加一个context参数即可,并返回,context数据可包括一般的数据类型(字符串、数字、布尔值等),也可传一些储存数据的结构,比如列表、字典等等.

记得在render渲染器中加入context参数

def show_1(request):list = [1,2,3,4,5]dict = {'name':'zhang','age':23,'from':'China'}context = {"name":"小谭","age":18,"ishandsome":True,"list":list,"dict":dict}return render(request, 'show_1.html', context)

在模板文件中接收到的参数,可用{{ }}显示到页面上,字典用key值索引,列表用整数索引取值,对于列表和字典的循环索引,可以使用模板文件中的for循环。

Title

展示

姓名:{{name}},年龄:{{age}},帅不帅?{{ishandsome}}的

{% for item in list %}

{{item}}

{% endfor %}
    {% for k,v in dict.items %}
  • {{k}}={{v}}
  • {% endfor %}

页面结果:

2、模板文件到视图函数

在定义视图函数时的参数requests其实是一个对象,内容包括用户发送网络请求后的一些信息,比如用户填写的表单等等。

这里我们新配置一个登录的url进行演示

#添加路径
path("login/", views.login),
#定义视图函数
def login(request):return render(request, 'login.html')

写一个简单的表单

Title

用户登录

#{% csrf_token %}

启动项目,随便输入一点数据

提交后会出现如下错误:

这是django独有的安全检测,解决方法也很简单,只需在代码块中添加这个:

{% csrf_token %}

加了之后右键检查网页源代码(或按F12),发现表单中多了一长串value,这一串码是django内部用来校验是否是正常我的网页发过来的,django会自动读取,这样就可以跳过django的安全检测。

在视图函数中编写代码,以接收并测试传送数据,因为是表单提交,所以是POST请求

def login(request):if request.method == 'POST':print(request.POST)return render(request, 'login.html')

在网页中输入数据并提交,发现控制台会打印出刚才表单输入的数据,这其实就是requests请求的参数。

还可以通过取值获取到这些具体的参数

username = request.POST['user']
password = request.POST['pwd']

四、引入静态文件

之前讲过一般只需要创建一个应用(app),但如果创建了多个应用,不可能每个应用创建一个templates,一般是整个Django项目共用一个templates,所以会在settings文件中进行配置,以让所有应用能共用templates。

在settings文件的大概58行加入:

"DIRS": [os.path.join(BASE_DIR, "templates")],

别忘了在前面引入os库!!

os.path.join(BASE_DIR, "templates") 的作用是将 BASE_DIR(项目的根目录)与 templates 子目录拼接成一个绝对路径,告诉 Django 从这个文件夹中寻找模板文件。

静态文件的介绍和一般存放位置前面已经讲了,现在来讲讲静态文件在页面中的引用

前端写好的文件和一些img之类的,可以应用到模板中。

如果是像我之前那样在控制台输入指令新建的Django文件,则用不了{% static %} 标签。但可以用文件的相对路径。

<script src="/static/js/jquery-3.6.0.min.js"></script>
<script src="/static/plugins/bootstrap-3.4.1/js/bootstrap.js"></script>

若是在Pycharm中创建的Django,可以使用{% static %} 标签引入静态文件

先在模板文件的顶部加入{% load static %}

引入 CSS 文件

引入 JS 文件

<script src="{% static 'js/scripts.js' %}"></script>

引入图片

Logo

引入其他静态资源

对于插件或 TypeScript 文件:

<script src="{% static 'plugins/plugin.js' %}"></script>
<script src="{% static 'ts/script.ts' %}"></script>

但是用这个语法,要用Pycharm创建Django项目,而且需要用专业版的Pycharm,不然会有报错,大家有专业版的可以用这种语法,社区版的就还是用上面的文件的相对路径引入即可。

五、请求与响应

1、请求

用户发送请求一般分为GET 请求和POST 请求,GET 和 POST 是 HTTP 的两种请求方法,GET 用于从服务器获取数据,参数通过 URL 传递,易被缓存,适合传递少量、非敏感数据;POST 用于向服务器提交数据,参数通过请求体传递,适合提交表单或大数据,且更安全。GET 请求参数可见,长度有限且幂等;POST 参数不可见,无长度限制,通常会修改服务器状态,不具幂等性。GET 常用于查询操作,POST 常用于提交数据或更新操作。

查询请求的方式:

requests.method

就对于前面写的表单,在控制台打印请求,就是POST请求

获取请求的方式:

request.POST

结果是一个对象,用来获取客户端通过 POST 请求 提交的数据。它是一个类似字典的对象,包含了所有通过 POST 方法提交的表单数据(通常是键值对的形式)。

request.GET

是 Django 中用于获取通过 GET 请求 提交的查询参数的一个对象。它是一个类似字典的对象,包含了客户端通过 URL 查询字符串传递的所有参数。

2、响应

像上面介绍的render,还有之前的HttpResponse,还有一个redirect重定向,都是经常用到的视图响应函数 的工具

redirect重定向是用户发送请求后,直接跳转到另外的网址,比如百度官网之类的,编写方式如下:

return redirect('https://blog.csdn.net/2403_83182682?type=blog')

第一个参数就是要跳转的网址

三个响应函数的区别如下:

基本功能

返回指定内容作为 HTTP 响应

渲染模板文件并返回包含动态内容的 HTTP 响应

返回一个 HTTP 重定向响应,将用户跳转到另一个 URL

常用场景

用于返回简单的字符串、HTML 或其他内容

用于返回包含动态页面的完整 HTML 响应

用于重定向用户到其他页面(如成功后的跳转)

返回内容类型

文本、HTML、JSON 或其他任意内容

渲染后的 HTML 内容

重定向响应,浏览器跳转到目标 URL

函数参数

内容(如字符串或 HTML 代码)

request、模板文件路径、上下文数据(字典)

URL 名称、URL 路径或视图名称

返回对象

HttpResponse 对象

HttpResponse 对象(经过模板渲染的 HTML)

HttpResponseRedirect 对象

适用场景示例

返回简单消息或 API 响应:HttpResponse("Hello")

返回渲染的页面:render(request, "index.html")

用户登录后跳转:redirect("dashboard")

六、综合小案例

经过前面的学习,详细您对Django以及有了一定的了解,下面进行一个小案例。

需求是定义一个登录页面,用户名或密码输出,会提示,正确则跳转到一个url,内容是所爬取的豆瓣电影排行前25。

可以就在之前的login上修改修改就行

1、源码展示

视图函数:

def login(request):# 豆瓣电影前25排行headers = {'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) ''Version/16.6 Mobile/15E148 Safari/604.1 Edg/131.0.0.0'}response = requests.get("https://movie.douban.com/top250", timeout=10, headers=headers)response = response.textresp = re.findall(r'(?!.* )(?P.*?)', response)if request.method == 'POST':print(request.method)print(request.POST)username = request.POST['user']password = request.POST['pwd']context= {'name':username,'password':password,'resp':resp}if username == 'edward' and password == '1234':return render(request, 'douban.html',context)else:# error_msg 登录失败返回信息return render(request, "login.html", {"error_msg": "用户名或密码错误"})return render(request, "login.html")

登录页面:

Title

用户登录

{% csrf_token %}{% if error_msg %}{{ error_msg }}{% endif %}

显示电影排行页面:

Title

豆瓣Top25

豆瓣电影前25榜单:
    {% for item in resp%}
  • {{item}}
  • {% endfor %}
{{response}}

2、注意事项以及部分解释

注意视图函数用了requests请求以及re解析,需在前面引入

import re
import requests

下面这段是关于网络爬虫的,有基础的可以看看,没基础的直接复制就行。

headers = {'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) ''Version/16.6 Mobile/15E148 Safari/604.1 Edg/131.0.0.0'}response = requests.get("https://movie.douban.com/top250", timeout=10, headers=headers)response = response.textresp = re.findall(r'(?!.* )(?P.*?)', response)

这里的用户名和密码是自己设置的,一般来说,用户名和密码是不会出现在代码中的,容易泄露,可以存放于数据库中,但我图方便就先这样了,后面再出一个完整的Django和Mysql连接的博客。

if username == 'edward' and password == '1234':return render(request, 'douban.html',context)

html页面做得比较简洁,有前端基础的同学可以试着改改,使页面更加美观。

3、展示

初始界面:

用户名或密码输入错误,提示错误:

成功登录,显示排行榜:

感谢大家的三连!!!我会尽快更新的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/994736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密码科学与优秀的技术专业毕业设计选题合集 创新型课题 导师喜欢的新颖课题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年安阳地区五大靠谱小程序制作开发企业推荐,看哪家信誉

在移动互联网时代,一款优质的小程序是企业链接用户、拓展业务的重要入口。面对市场上众多小程序制作开发企业,如何选择诚信可靠、实力强劲的合作伙伴?以下依据不同类型,为你推荐2025年安阳地区十大靠谱小程序制作开…

2025年口碑好的锂电池平板车/履带式运输平板车杭州环保装修

2025年口碑好的锂电池平板车/履带式运输平板车杭州环保装修行业应用指南行业背景与市场趋势随着中国"双碳"目标的持续推进和绿色建筑理念的深入人心,杭州及周边地区的环保装修行业正迎来前所未有的发展机遇…

2025年挖掘机斗齿厂推荐:挖掘机斗齿正规供应商深度解析

TOP1推荐:宁波市鄞州福美工程机械有限公司 评价指数:★★★★★ 口碑评分:99分 行业表现:A++++级 介绍:宁波市鄞州福美工程机械有限公司是国内重型机械配件领域的资深制造商,专注挖掘机斗齿、装载机铲齿、销子、…

Chrome离线版本下载地址

Chrome官网:https://www.google.cn/chrome 点击“下载Chrome”按钮,得到的就是 Google Chrome 在线安装包。 若想下载离线包需要在链接后增加以下参数:?standalone=1&platform=win64 参数说明: standalone=1 …

2025年五大抗磨斗齿制造厂家排行榜,耐磨斗齿厂商新测评精选

为帮重型工程、资源开采企业高效锁定适配自身工况的耐磨斗齿供应商,避免因配件错配、耐磨不足导致停工损失,我们从产品耐磨性(如工矿实测使用寿命)、型号适配精度(含原装齿座匹配度)、交货响应速度(覆盖现货库存…

2025年知名的大连全屋定制家具用户满意度榜

2025年知名的大连全屋定制家具用户满意度榜行业背景与市场趋势随着中国城市化进程的不断推进和居民生活水平的持续提高,全屋定制家具行业近年来呈现出蓬勃发展的态势。2025年,大连作为东北地区重要的经济中心和宜居城…

领航级智能工厂!一文拆解格力电器如何成就智能制造的国家名片?

2025年11月,工业和信息化部发布的《2025年度领航级智能工厂项目培育名单》正式公示,全国仅15家企业入选。格力电器(珠海金湾)有限公司凭借“全价值链格力协同屋空调智能工厂”项目脱颖而出,成为广东省唯一入选企业…

守护金融安全,深圳财付通小额贷款服务有限公司在行动:科技与教育并重

在当下这个日益数字化的社会中,尽管非法集资活动借助互联网的掩护,逐渐演变出新的犯罪形态,但其终究难以逃脱法律的制裁。针对当前不断涌现的各种问题与隐患,深圳财付通小额贷(简称:财付通小贷)的相关管理层强调,必须坚…

最新免费降 AI 率网站全测评 20 款工具横向对比(学生党省钱必备)一文说明降低AI率的方法?如何降低AI率?

最新免费降 AI 率网站全测评 20 款工具横向对比(学生党省钱必备)一文说明降低AI率的方法?如何降低AI率?随着 AIGC 技术在写作领域的普及,论文、自媒体文案等文本的 AI 检测也日趋严格,降 AI 率工具成为了不少创作…

酵母蛋白:低嘌呤优质蛋白的理想之选,数据见证其营养优势

在健康饮食理念日益深入人心的当下,优质蛋白的摄入成为维持机体正常生理功能的关键,而嘌呤含量则是痛风及高尿酸人群选择蛋白来源的重要考量。酵母蛋白作为一种新兴的优质蛋白,不仅具备全面的营养特性,更以低嘌呤的…

2025年比较好的航拍素材飞手接单/飞手接单平台用户口碑排行榜

2025年航拍素材飞手接单平台用户口碑排行榜行业背景与市场趋势随着低空经济的蓬勃发展,航拍服务市场在2025年迎来了前所未有的增长机遇。据行业数据显示,全球商业航拍市场规模已突破千亿元,年复合增长率保持在25%以…

2025十大益生菌品牌榜出炉!护胃养肠选这些准没错

《2025中国职场人肠道健康白皮书》的调研数据,为年轻职场群体的肠道健康状况敲响警钟:72%的90后、00后正受肠道不适困扰,而长期久坐、奶茶外卖高频摄入、作息昼夜颠倒,正是引发这类问题的核心诱因。其中,便秘、餐…

助力小微梦想:四川佳物小贷与得物的金融布局探索

在四川的一个小县城里,张师傅的早餐铺刚刚换了新招牌。这笔3万元的小额贷款,是他通过得物APP上的佳物分期服务申请的。"从提交资料到放款只用了一天",张师傅边炸油条边说。这背后,藏着得物金融从球鞋转卖平台…

靠谱的商标转让平台有哪些?2025热门商标购买平台推荐盘点

在品牌意识日益增强的今天,越来越多的企业和个人开始重视商标的价值。无论是创业起步、业务拓展,还是规避风险,拥有一枚合适的商标都显得尤为重要。而相较于从零申请,通过商标转让快速获得已注册商标,成为不少人的…

【Java基础】(二)面向对象 - berlin

一、类与对象类:定义:类是一个模板或蓝图,它描述了一类对象共同具有的状态(属性)和行为(方法)。 组成:类主要由以下部分组成:成员变量:描述对象的属性或状态(例如:String name; int age;)。 成员方法:描…

2025年质量好的杭州别墅装修/杭州别墅大宅装修精品推荐榜

2025年质量好的杭州别墅装修/杭州别墅大宅装修精品推荐榜开篇:杭州别墅装修市场现状与趋势随着杭州高端住宅市场的持续升温,别墅装修行业迎来了新一轮发展机遇。2024年杭州别墅市场交易量同比增长18.7%,带动了高端装…

2025最新免费降AI率神器盘点:11款中英文工具横评,降AI率有效的方法是什么?

2025最新免费降AI率神器盘点:11款中英文工具横评,降AI率有效的方法是什么?面对学术论文的AIGC检测大关,这些智能工具如何在几分钟内将机器生成的痕迹巧妙转化为自然流畅的人类表达? 从AIGC检测率48%的本科论文到A…

2025年安阳靠谱的网络推广公司排行榜,本地企业获客优选服务

为帮安阳及周边企业高效锁定适配自身需求的网络推广合作伙伴,避免选型走弯路,我们从技术落地能力(如AI GEO优化覆盖度、新媒体流量转化效率)、服务匹配度(含本地企业痛点解决、全周期陪伴支持)、真实客户口碑(侧…

2025年五大口碑好的GEO推广公司排行榜,看哪家服务性价比

为帮企业高效锁定适配自身需求的GEO推广合作伙伴,避免选型走弯路,我们从技术落地能力(如AI平台覆盖度、GEO优化效果)、服务专业度(含行业适配性、全周期支持)、真实客户口碑(侧重同行业项目反馈)及性价比(投入…