【python】Django——templates模板、静态文件、django模板语法、请求和响应

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~

【Django专栏】
Django——django简介、django安装、创建项目、快速上手
Django——templates模板、静态文件、django模板语法、请求和响应
Django——连接mysql数据库

Django——templates模板、静态文件、django模板语法、请求和响应

  • templates模板
    • 按app顺序寻找模板
    • 全局模板
  • 静态文件
    • jquery
    • Bootstrap
  • django模板语法
    • 语法特性和用法
    • 视图中的render函数
    • 示例
  • 请求和响应
    • 请求(Request)
      • 1.request的属性和方法
      • 2.GET请求
      • 3.POST请求
    • 响应(Response)
      • 1.HttpResponse
      • 2.render
      • 3.redirect重定向
    • 报错解决

templates模板

Django 模板是 Django 框架中用于生成动态内容的一种工具,它允许开发者将 Python 代码和静态模板结合起来,以生成最终的 HTML 内容。使用 Django 模板可以让开发者在页面中插入动态数据、应用逻辑控制流程,并重用通用的页面结构和样式。

在 Django 中,模板通常与视图函数结合使用,视图函数负责处理业务逻辑并将数据传递给模板,模板则负责渲染这些数据并生成最终的 HTML 页面返回给用户。通过良好的组织和使用模板,可以使 Web 应用程序的代码更加清晰、易于维护,并提高开发效率。

按app顺序寻找模板

在这里插入图片描述
注意:renturn render()【不是找当前app,而是根据app的注册顺序寻找user_list.html】在这里插入图片描述

全局模板

一般情况下,属于哪个app的模板就写在哪个app下。全局模板需要配置

# 修改setting.pyimport os
TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [os.path.join(BASE_DIR,'templates')],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]

在这里插入图片描述
在这里插入图片描述

静态文件

样式表(CSS)、JavaScript 文件、图像、字体文件等

在使用 Django 这样的 Web 框架时,静态文件通常存储在应用程序的 “static” 目录中。这些静态文件可以包括用于美化页面样式的 CSS 文件,用于增强交互性的 JavaScript 文件,以及网站使用的图像、字体等资源。

jquery

jquery下载网址:https://releases.jquery.com/jquery/
jquery.3.6.min.js(打开链接复制粘贴):https://code.jquery.com/jquery-3.6.0.min.js
版本区别:
Uncompressed(未压缩):包含了完整的源代码,没有进行任何压缩或优化处理。便于阅读和调试,文件体积较大。

Minified(压缩):通过删除空格、注释和其他不必要的字符来减小文件体积。代码阅读和调试困难一些。

Slim(精简版):去掉了一些不常用的功能或模块,以减小文件大小。只保留核心功能,可以根据需求自行添加需要的模块或插件。

Slim Minified(精简压缩版):精简版进行了代码压缩处理,去除了多余的字符,以进一步减小文件体积。

Bootstrap

Bootstrap 中文网:https://www.bootcss.com/
下载Bootstrap v3:https://v3.bootcss.com/

{% load static %}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css'%}">
</head>
<body>
<h1>用户列表</h1>
<input type="text" class="btn btn-primary" value="新建"/>
<img src="{% static 'img/1.png' %}" alt=""><script src="{% static 'js/jquery.3.6.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

django模板语法

语法特性和用法

作为一个Web框架,Django需要一种方便的方法来动态地生HTML 。最常见的方法依赖于模板。模板包含所需HTML输出的静态部分以及一些特殊语法描述如何插入动态内容。Django 官方文档关于模板语法的网址:https://docs.djangoproject.com/en/3.2/topics/templates/

以下是 Django 模板语法的一些重要特性和用法:

  1. 变量插值

    • 在模板中使用 {{ 变量名 }} 的语法来插入变量的值。
    • 例如:<h1>{{ title }}</h1>
  2. 逻辑操作

    • 使用 {% 标签 %} 的语法来执行一些逻辑操作,如控制流程、循环和逻辑判断等。
    • 例如:{% if condition %} ... {% endif %}
  3. 过滤器

    • 过滤器允许对变量进行处理或格式化,以满足特定需求。
    • 通过在变量之后使用 | 和过滤器名称来应用过滤器。
    • 例如:{{ variable|filter_name }}
  4. 模板继承

    • 使用 {% extends 'base.html' %} 标签来创建一个模板继承结构,在子模板中可以覆盖父模板的特定部分。
    • 例如:在子模板中使用 {% block content %} ... {% endblock %} 来覆盖父模板中的内容。
  5. 包含

    • 使用 {% include 'partial.html' %} 标签将其他模板文件包含到当前模板中。
    • 这可以用于重复使用和组织模板代码。
  6. 循环

    • 使用 {% for item in items %} ... {% endfor %} 的语法进行循环操作。
    • 例如:循环遍历一个列表或查询集合中的数据。
  7. 静态文件引用

    • 使用 {% static 'path/to/file' %} 的语法引用静态文件,如 CSS、JavaScript 和图像等。
    • Django 通过静态文件处理器来管理和提供静态文件。

这只是 Django 模板语法的一小部分,还有其他更多的特性和用法。通过使用模板语法,开发人员可以在 Django 中构建灵活且具有动态性的网页,并将数据与模板进行分离,以便于维护和重用。

视图中的render函数

当在视图函数中使用 render 函数时,它会执行以下主要操作:

  1. 加载模板
    render 函数首先会根据给定的模板名称加载相应的模板文件。

  2. 渲染上下文
    接下来,render 函数会将传入的数据(上下文)与加载的模板结合起来,形成最终的渲染上下文。

  3. 渲染模板
    使用渲染上下文,render 函数会将模板中的变量、标签和过滤器等进行解析和替换,生成最终的 HTML 内容。

  4. 创建 HTTP 响应
    最后,render 函数会将渲染得到的 HTML 内容作为响应的正文,生成一个 HTTP 响应对象,并将其返回。

示例

在这里插入图片描述
views.py

# views.py
def template(request):teacher = "背背"students = ["圈圈1","圈圈2","圈圈3"]student_info = {'name':"圈圈", 'age':18, 'gender':"女"}return render(request,"template.html",{"t": teacher,"s": students,"s_info": student_info})

template.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板语法学习</title>
</head>
<body>
<h4 style="color:red">变量插值:</h4>
<div>teacher:{{ t }}</div><hr/>
<div>students列表:{{ s }}</div><hr/>
<div>students0:{{ s.0 }}</div>
<div>students1:{{ s.1 }}</div>
<div>students2:{{ s.2 }}</div><hr/>
<div>name:{{ s_info.name }}</div>
<div>age:{{ s_info.age }}</div>
<div>gender:{{ s_info.gender }}</div><h4 style="color:red">循环:</h4>
<div>{% for item in s%}<li>{{ item }}</li>{% endfor %}
</div><hr/><div>{% for k,v in s_info.items %}<li>{{ k }} : {{ v }}</li>{% endfor %}
</div><h4 style="color:red">逻辑操作:</h4>
<div>{% if s_info.name == "圈圈" %}Yes{% else %}No{% endif %}
</div>
</body>
</html>

在这里插入图片描述

请求和响应

在 Django 中,请求和响应是 Web 应用程序中非常重要的部分。以下是关于 Django 请求和响应的简要说明:

  1. 请求(Request)

    • 在 Django 中,请求对象代表了客户端发送给服务器的 HTTP 请求。请求对象包含了关于请求的各种信息,如 HTTP 方法、请求头部、路径参数、查询参数、表单数据等。
    • Django 的请求对象是 HttpRequest 类的实例,可以通过视图函数的参数获取到请求对象,并从中获取所需的信息。
  2. 响应(Response)

    • 响应对象代表了服务器对客户端请求的回复,包含了要发送回客户端的内容和元数据。在 Django 中,响应对象通常是 HttpResponse 或其子类的实例。
    • 可以通过视图函数返回一个响应对象来向客户端发送数据,响应对象可以包含 HTML 内容、JSON 数据、文件下载等。

在 Django 中处理请求和响应的过程通常发生在视图函数中。视图函数接收请求对象作为参数,根据请求的内容进行处理,并返回一个响应对象以供客户端使用。Django 还提供了许多方便的工具和函数来简化请求和响应的处理,如装饰器、模板渲染、重定向等,使得开发者可以更轻松地构建强大的 Web 应用程序。

请求(Request)

1.request的属性和方法

HttpRequest对象具有许多属性和方法,以下是其中一些常用的:

属性:

  • request.method:HTTP请求的方法,例如 ‘GET’ 或 ‘POST’。
  • request.GET:一个类似字典的对象,包含了所有的GET参数。
  • request.POST:一个类似字典的对象,包含了所有的POST参数。
  • request.FILES:一个类似字典的对象,包含了所有上传的文件。
  • request.path:当前请求的路径,不包括域名部分。
  • request.META:一个包含了所有HTTP头部信息的字典。
  • request.session:一个表示当前会话的Session对象。
  • request.user:表示当前经过身份验证的用户的User对象。

方法:

  • request.get():从请求参数中获取指定键的值,如果键不存在则返回默认值。
  • request.getlist():从请求参数中获取指定键的值列表,即使只有一个值也返回列表。
  • request.is_ajax():检查请求是否通过Ajax发送。
  • request.is_secure():检查请求是否通过安全连接(HTTPS)发送。
  • request.build_absolute_uri():构建完整的绝对URL。
  • request.is_authenticated():检查当前用户是否已经经过身份验证。
  • request.is_anonymous():检查当前用户是否匿名。

除了上述属性和方法之外,还有其他更多的属性和方法可用于处理HttpRequest对象。你可以根据需要在视图函数中使用这些属性和方法来获取请求的各种信息,并根据其进行相应的处理和响应。

2.GET请求

在这里插入图片描述
处理一个简单的 GET 请求时,以下是一个基本的 Django 视图函数示例:
views.py

# POST方式if request.method == 'POST':# 处理表单提交name = request.POST.get('name', '')email = request.POST.get('email', '')print(f'Hello, {name}! email,{email}')# 构造上下文数据context = {'name': name,'email': email,}# 渲染模板并返回响应return render(request, 'result.html', context)else:# 显示表单页面return render(request, 'register.html')

register.html

<!DOCTYPE html>
<html>
<head><title>输入信息</title>
</head>
<body><h2>请输入您的信息</h2><form method="post" action="/register/">
<!--        {% csrf_token %} 是 Django 模板标记,用于防止跨站请求伪造(CSRF)攻击。-->
<!--        Django 要求所有 POST 的表单都要包含这个标记,以确保安全性。-->{% csrf_token %}<label for="name">姓名:</label><input type="text" id="name" name="name"><br><br><label for="email">邮箱:</label><input type="email" id="email" name="email"><br><br><input type="submit" value="提交"></form>
</body>
</html>

result.html

<!-- result.html -->
<!DOCTYPE html>
<html>
<head><title>提交结果</title>
</head>
<body><h2>提交结果</h2><p>您提交的信息如下:</p><p>姓名:{{ name }}</p><p>邮箱:{{ email }}</p>
</body>
</html>

3.POST请求

在这里插入图片描述

register.html和result.html与GET方法相同

views.py

# GET方式:http://127.0.0.1:8000/register?name=圈圈&email=123456789@qq.comif request.method == 'GET':if request.GET.get('name')==None or request.GET.get('email')==None:return render(request, 'register.html')else:name = request.GET.get('name')email = request.GET.get('email')# 构造上下文数据context = {'name': name,'email': email,}return render(request, 'result.html', context)

响应(Response)

1.HttpResponse

return HttpResponse("响应1")

2.render

return render(request, 'register.html')

3.redirect重定向

return redirect("https://www.baidu.com")

报错解决

报错信息:
Forbidden (403)
CSRF verification failed. Request aborted.
在这里插入图片描述

报错原因:
这个错误通常是由于Django中的CSRF保护机制导致的。CSRF(Cross-Site Request Forgery)是一种网络安全攻击,Django通过在表单中添加CSRF标记来防止这种类型的攻击。当表单提交时,Django会验证CSRF标记,如果验证失败就会产生这个错误。

解决方法:

  1. 在模板中添加CSRF标记:确保你的表单模板中包含了{% csrf_token %}标记,例如:
<form method="post">{% csrf_token %}<!-- 其他表单字段 --><input type="submit" value="Submit">
</form>
  1. 使用csrf_exempt装饰器:如果你的视图函数不需要CSRF保护,你可以在视图函数上使用@csrf_exempt装饰器来跳过CSRF验证,例如:
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def your_view(request):# 视图函数代码
  1. 检查中间件设置:确保Django的CSRF中间件已经被正确添加到了MIDDLEWARE设置中,并且处于启用状态,例如:
MIDDLEWARE = [# ...'django.middleware.csrf.CsrfViewMiddleware',# ...
]

通过以上方法之一,你应该能够解决“CSRF verification failed. Request aborted.”这个错误,并成功提交表单数据。

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

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

相关文章

vue3 ts中使用axios链式报错:Property ‘code‘ does not exist on type ‘{}

在vue3项目中&#xff0c;链式调用接口的时候&#xff0c;报错&#xff1a;Property code does not exist on type {}&#xff0c;如下代码&#xff1a; api1.then(res>{...return api(options) }).then(res2 >{if(res2.code200){ // 这里报错 Property code does not e…

如何实现Redisson分布式锁

首先&#xff0c;不要将分布式锁想的太复杂&#xff0c;如果我们只是平时业务中去使用&#xff0c;其实不算难&#xff0c;但是很多人写的文章不能让人快速上手&#xff0c;接下来&#xff0c;一起看下Redisson分布式锁的快速实现 Redisson 是一个在 Redis 的基础上实现的 Java…

公益SRC实战|SQL注入漏洞攻略

目录 一、信息收集 二、实战演示 三、使用sqlmap进行验证 四、总结 一、信息收集 1.查找带有ID传参的网站&#xff08;可以查找sql注入漏洞&#xff09; inurl:asp idxx 2.查找网站后台&#xff08;多数有登陆框&#xff0c;可以查找弱口令&#xff0c;暴力破解等漏洞&…

SpringBoot和Spring源码下载

1.下载&#xff1a;在一个空的干净地创建一个文件夹叫springsourcecode&#xff0c;其实叫什么都行的。 git clone https://github.com/spring-projects/spring-framework.git 2.JDK要和gradle匹配 我们要21的&#xff0c;今天为止2023年11月13日&#xff0c;idea是2023.2。 …

python数据结构与算法-03_链表

链式结构 上一节讲到了支持随机访问的线性结构&#xff0c;这次我们开始讲链式结构, 视频里我会说下这两种结构的区别&#xff0c;然后讲解最常见的单链表和双链表。 之前在专栏文章那些年&#xff0c;我们一起跪过的算法题[视频]里实现过一个 lru_cache&#xff0c; 使用到的…

考研分享第3期 | 211本378分上岸大连理工电子信息经验贴

考研分享第3期 | 211本378分上岸大连理工电子信息经验贴 一、个人信息 姓名&#xff1a;Ming 本科院校&#xff1a;某211学校电子信息工程学院 电子科学与技术专业 上岸院校&#xff1a;大连理工大学 电子信息与电气工程学部 电子信息&#xff08;0854&#xff09; 择校意…

数据中心:精密空调监控,这招太高效了!

在当今日益复杂的工业环境中&#xff0c;精密空调系统的监控和管理变得至关重要。随着科技的迅猛发展&#xff0c;各行各业对温度、湿度和空气质量等参数的高度控制需求不断增加。 精密空调监控系统通过实时数据采集、分析和反馈&#xff0c;为企业提供了可靠的手段来确保生产环…

给你一个整数 n,请你判断该整数是否是 2 的幂次方。

题意&#xff1a; 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1…

settings.json配置

settings.json配置 {"editor.tabSize": 2,"git.ignoreWindowsGit27Warning": true,"workbench.editor.untitled.hint": "hidden","security.workspace.trust.untrustedFiles": "open","[vue]": {"…

dll文件【C#】

加载方法&#xff1a; [DllImport("controlcan.dll")] public static extern UInt32 VCI_OpenDevice(UInt32 DeviceType, UInt32 DeviceInd, UInt32 Reserved); 文件存放位置&#xff1a; 一般放Debug文件夹下。 运行错误&#xff1a; 原因是CPU位数选择不对&…

不变式和橄榄树-UMLChina建模知识竞赛第4赛季第20轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。第4题为附加题&#xff0c;对错不影响优胜者…

科普测量开关电源输出波形的三种方法及电源波形自动化测试步骤

开关电源波形测试就是对开关电源的输出波形进行检测和分析&#xff0c;观察开关电源参数变化&#xff0c;以此来判断开关电源的性能是否符合要求。好的开关电源对于设备以及整个电路的正常运行是非常重要的&#xff0c;因此开关电源输出波形测试是开关电源测试的重要环节&#…

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

无人值守的共享台球室:微信小程序实现自助服务

随着科技的发展和互联网的普及&#xff0c;无人值守的共享台球室已经成为一种新型的娱乐方式。通过微信小程序&#xff0c;消费者可以实现在线预订、自助结账、评价反馈等一站式服务&#xff0c;带来更加便捷、高效的体验。本文将探讨如何利用微信小程序实现无人值守的共享台球…

vue滚动到指定位置

一、首先获取需要滚动的外层容器的宽度 let boxWidth this.$refs.box.offsetWidth二、计算出容器内单个元素的宽度&#xff0c;以12个为例 let itemWidth boxWidth / 12三、计算出容器内单个元素的宽度&#xff0c;以横向滚动&#xff0c;内部12个元素为例 this.$refs.box…

【Ubuntu】安装Docker

一、查看系统基本情况 1.1 查看系统版本 指令一 lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal 指令二 cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE20.04 DISTRIB_CODE…

Flutter笔记 - 关于 fit 属性以及相关知识的总结

Flutter笔记 关于 fit 属性以及相关知识的总结 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/13434451…

软考高级职称哪个好考?明确给你答案

软考考试分为初、中、高三级&#xff0c;其中高级5个方向分别为系统分析师、信息系统项目管理师、网络规划设计师、系统架构设计师、系统规划与管理师。软考高级职称考什么好&#xff1f;有很多人是因为要评高级职称而选择参考软考高级资格考试&#xff0c;那么软考高级里哪个资…

16个值得推荐的.NET ORM框架

什么是ORM? ORM 是 Object Relational Mapping 的缩写&#xff0c;译为“对象关系映射”&#xff0c;是一种程序设计技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。它解决了对象和关系型数据库之间的数据交互问题&#xff0c;ORM的作用是在关系型…

txt2xml

import os import cv2 import pathlib from xml.dom.minidom import Document # 支持多种格式图片,可以自己添加 def search_file_name(file_path, img_root): file_format [.jpg, .JPG, .png, .PNG, .JPEG, .jpeg] file_path pathlib.Path(file_path) file_name…