当前位置: 首页 > news >正文

陕西省建设厅网站官网企业月报自己制作手机网站

陕西省建设厅网站官网企业月报,自己制作手机网站,计算机网站开发是那个语言,查看网站外链代码我叫补三补四#xff0c;很高兴见到大家#xff0c;欢迎一起学习交流和进步今天来讲一讲视图Django与模板文件工作流程模板引擎#xff1a;主要参与模板渲染的系统。内容源#xff1a;输入的数据流。比较常见的有数据库、XML文件和用户请求这样的网络数据。模板#xff1a… 我叫补三补四很高兴见到大家欢迎一起学习交流和进步今天来讲一讲视图 Django与模板文件工作流程模板引擎主要参与模板渲染的系统。内容源输入的数据流。比较常见的有数据库、XML文件和用户请求这样的网络数据。模板一般是和语言相关的文本。工作流程作为一个web框架Django自带了一套模板系统动态生成HTML文本模板主要包含两个部分HTML的静态部分和描述如何插入动态内容的特殊语法模板系统的相关配置模板的配置也在settings.py当中实现TEMPLATES [  # 模板配置变量{BACKEND: django.template.backends.django.DjangoTemplates,  # 配置使用自带模板DIRS: [  # 配置寻址目录/var/www/html/site.com,/var/www/html/default,]},{BACKEND: django.template.backends.jinja2.Jinja2,  # 配置使用Jinja2模板DIRS: /var/www/html/another_app  # 配置寻址路径}]这段代码是Django框架中用于配置模板引擎的设置。Django是一个高级的Python Web框架它允许开发者使用Python编写服务器端代码。模板引擎是Django中用于生成HTML页面的工具它允许开发者将动态内容插入到静态HTML模板中。代码中的TEMPLATES变量是一个列表包含多个字典每个字典定义了一组模板配置。这些配置告诉Django如何渲染模板。下面是代码的详细解释1. TEMPLATES [ ... ]定义了一个名为TEMPLATES的列表其中包含多个模板配置。2. 第一个字典配置• BACKEND: django.template.backends.django.DjangoTemplates指定使用Django自带的模板引擎。这是Django默认的模板引擎它基于Python编写。• DIRS: [ ... ]定义了一个目录列表Django会在这些目录中查找模板文件。在这个例子中Django会在/var/www/html/site.com和/var/www/html/default这两个目录中查找模板文件。3. 第二个字典配置• BACKEND: django.template.backends.jinja2.Jinja2指定使用Jinja2模板引擎。Jinja2是一个流行的Python模板引擎它支持更复杂的模板语法和功能。• DIRS: /var/www/html/another_app定义了一个单一的目录Django会在该目录中查找Jinja2模板文件。在这个例子中Django会在/var/www/html/another_app目录中查找模板文件。通过这种配置Django项目可以同时使用Django自带的模板引擎和Jinja2模板引擎从而提供更大的灵活性和选择。开发者可以根据需要选择使用哪种模板引擎或者在不同的应用中使用不同的模板引擎。简单理解BACKEND就是import了一些库模板语言模板引擎可以识别模板中的特殊结构以动态生成文本。主要的特殊结构有变量和标签。在进行渲染的时候模板引擎根据上下文对模板中的变量进行替换并且根据操作标签来执行操作输出文本。Django的模板语言当中包含了四种结构变量、标签、过滤器和注释Django模板语言包含四个主要结构变量、标签、过滤器和注释。1.变量Variables变量用于在模板中显示来自视图view传递的数据。变量通常以双大括号{{ }}包裹。例如 pHello, {{ name }}!/p如果name的值是Alice那么模板渲染后会显示 pHello, Alice!/p2.标签Tags标签用于控制模板的逻辑例如循环、条件判断、加载外部模板等。标签以{% %}包裹。常见的标签包括 • {% if %}条件判断• {% for %}循环• {% include %}加载外部模板• {% extends %}和{% block %}模板继承 例如 {% if user.is_authenticated %}pWelcome, {{ user.username }}!/p{% else %}pPlease login./p{% endif %}3.过滤器Filters过滤器用于对变量进行格式化或转换。过滤器通过管道符号|应用到变量上。例如 p{{ date|date:Y-m-d }}/p如果date是一个datetime对象过滤器会将其格式化为指定的格式。Django内置了许多过滤器如upper、lower、truncatewords等。4.注释Comments模板注释用于在模板中添加说明性内容这些内容在渲染时会被忽略。Django模板注释使用{# #}包裹。例如 {# This is a comment in the template #}pHello, {{ name }}!/p模板继承在真实开发环境下不乏不同网页结构和样式一样的情况为减少重复增加可维护性我们会使用模板继承具体实现在Web开发中模板继承是一种常见的模式它允许你创建一个基础模板然后让其他模板继承这个基础模板的结构同时能够覆盖或添加特定的内容。这种机制在许多模板引擎中都有实现比如DjangoPython、Jinja2Python、TwigPHP等。实现步骤1.创建基础模板base.html基础模板定义了页面的通用结构包括HTML的基本骨架、头部、尾部、导航栏等。你可以在基础模板中定义一些“块”block这些块可以在子模板中被覆盖。 !-- base.html --!DOCTYPE htmlhtml langenheadlink relstylesheet hrefstyle.css{% block title %}titleDefault Title/title{% endblock %}/headbodydiv idsidebarulli主页/lili帮助/li/ul/divdiv idcontent{% block content %}!-- 默认内容 --{% endblock %}/divfooter idfooter我是页脚/footer/body/html2.创建子模板并继承基础模板子模板通过使用{% extends %}标签来继承基础模板。然后子模板可以使用{% block %}标签来覆盖基础模板中定义的块。 !-- home.html --{% extends base.html %}{% block title %}title主页/title{% endblock %}{% block content %}h1欢迎来到主页/h1p虽然这个网站什么内容都没有但是它展示了使用模板继承的用法。/p{% endblock %}3.Django视图函数中指定模板在你的Django视图函数中你需要指定使用哪个模板来渲染页面。 from django.shortcuts import renderdef home(request):return render(request, home.html)4.模板引擎如何处理继承当Django的模板引擎处理home.html时它会首先加载base.html然后查找home.html中定义的块并用这些块替换base.html中的相应块。最终模板引擎会生成一个完整的HTML页面其中包含了基础模板的结构和子模板的特定内容。在上面代码中实现继承的关键是extends标签。它告诉模板引擎该模板扩展了另外一个模板。当模板系统渲染主页面时首先要找到父模板即base.html文件。在父模板中引擎会找到两个block标签然后用子模板中的内容填充这个区域。多级继承常见的网站模板继承结构往往是三级的通常用于提高代码复用性和维护效率。---1.第一级模板基础模板第一级模板是整个网站的“骨架”它定义了网站的整体布局和通用元素。这些元素通常包括• 头部Header包含网站的logo、导航栏Navigation Bar、登录/注册入口等。• 底部Footer包含版权信息、联系方式、网站地图、隐私政策等。• 侧边栏Sidebar可选用于放置广告、快捷链接或其他辅助信息。• 主内容区域Main Content Area这是页面的核心区域用于展示具体的内容。第一级模板通常会在这里预留一个占位符Placeholder供子模板填充具体内容。第一级模板的作用是为整个网站提供一个统一的外观和风格确保所有页面在结构和视觉上保持一致。例如一个电商网站的头部可能始终显示“首页”“商品分类”“购物车”“我的订单”等导航链接而底部则包含“关于我们”“售后服务”“联系方式”等通用信息。---2.第二级模板功能分类模板第二级模板是对第一级模板的扩展它专注于网站的某个功能模块或分类。例如• 用户中心包含用户相关的功能如“我的订单”“我的收藏”“个人信息”“账户设置”等。• 商品中心包含商品相关的功能如“商品分类”“商品列表”“热门商品推荐”“搜索结果”等。• 帮助中心包含常见问题解答FAQ、联系客服、使用说明等。第二级模板会继承第一级模板的结构并在主内容区域填充与该功能模块相关的通用内容。例如在“用户中心”模板中主内容区域可能会显示一个用户操作的导航菜单如• 我的订单显示订单列表。• 我的收藏显示收藏的商品列表。• 个人信息提供用户信息的编辑表单。这些内容通常以列表的形式呈现为第三级模板提供进一步的细化空间。第二级模板的作用是将网站的功能模块化方便管理和扩展。---3.第三级模板具体页面模板第三级模板是具体页面的实现它继承第二级模板并在主内容区域填充具体的页面内容。例如• 用户详情页面继承“用户中心”模板展示用户的详细信息如头像、昵称、注册时间、积分等。• 商品详情页面继承“商品中心”模板展示商品的详细信息如商品图片、价格、规格、用户评价、购买按钮等。• 帮助页面继承“帮助中心”模板展示具体的帮助内容如常见问题的详细解答、联系方式等。第三级模板的作用是实现具体的功能页面满足用户的具体需求。它通过继承第二级模板复用了通用的布局和功能模块同时通过填充具体的内容实现了页面的个性化。---4.模板继承的实现以HTML为例模板继承可以通过模板引擎如Django模板、Jinja2等实现。以下是一个简单的示例第一级模板base.html !DOCTYPE htmlhtml langenheadmeta charsetUTF-8title{% block title %}My Website{% endblock %}/title/headbodyheaderh1My Website/h1navulliHome/liliUser Center/liliProduct Center/liliHelp/li/ul/nav/headermain{% block content %}!-- 主内容区域的占位符 --{% endblock %}/mainfooterp© 2025 My Website/p/footer/body/html第二级模板user_center.html {% extends base.html %}{% block title %}User Center - My Website{% endblock %}{% block content %}h2User Center/h2ulliMy Orders/liliMy Favorites/liliProfile/li/uldiv{% block user_content %}!-- 用户中心的具体内容占位符 --{% endblock %}/div{% endblock %}第三级模板user_profile.html {% extends user_center.html %}{% block title %}Profile - User Center - My Website{% endblock %}{% block user_content %}h3User Profile/h3pWelcome, {{ user.name }}!/ppEmail: {{ user.email }}/ppRegistered since: {{ user.register_date }}/p{% endblock %}帮助页面的实现帮助页面的实现可以类似地继承“帮助中心”模板。例如• 帮助中心模板help_center.html {% extends base.html %}{% block title %}Help Center - My Website{% endblock %}{% block content %}h2Help Center/h2ulliFAQ/liliContact Us/li/uldiv{% block help_content %}!-- 帮助中心的具体内容占位符 --{% endblock %}/div{% endblock %}• 具体帮助页面help_faq.html {% extends help_center.html %}{% block title %}FAQ - Help Center - My Website{% endblock %}{% block help_content %}h3Frequently Asked Questions/h3pHere are some common questions and answers.../p!-- 具体的FAQ内容 --{% endblock %}---5.总结这种三级模板继承结构的优点包括• 代码复用性高通过继承通用的布局和功能可以在多个页面中复用。• 维护方便只需要修改基础模板或功能分类模板即可更新整个网站的外观或功能模块。• 扩展性强可以轻松添加新的功能模块或页面而无需重新设计整个布局。这种结构在实际开发中非常常见尤其是在大型网站或复杂的应用中能够显著提高开发效率和代码质量。字符转义用处在HTML模板渲染中如果直接将用户输入的内容如用户名插入到HTML中而没有进行适当的转义或过滤就可能引发XSS跨站脚本攻击。XSS攻击是一种安全漏洞攻击者通过在用户输入中嵌入恶意代码如JavaScript脚本当这些代码被渲染到页面上时就会在用户的浏览器中执行从而可能窃取用户信息、篡改页面内容或进行其他恶意操作。例如你好, {{ username }}如果用户将用户名设置为 scriptalert(一次攻击)/script 那么渲染后的HTML就会变成你好, scriptalert(一次攻击)/script当页面加载时浏览器会执行这段JavaScript代码这种攻击方式称之为XSS攻击XSS攻击的核心就是攻击者通过某种方式通常是用户输入将恶意脚本注入到网页中然后让这个脚本在其他用户的浏览器中执行。简单来说就是攻击者→输入恶意脚本→网站响应体返回脚本→浏览器执行脚本我们可以用一个更详细的流程来解释这个过程---1.正常流程正常情况下用户输入的内容是安全的网站会正确处理并显示这些内容。例如• 用户输入小明• 网站处理后显示你好小明---2.XSS攻击的流程XSS攻击的关键在于攻击者利用了网站对用户输入的处理漏洞将恶意脚本注入到网页中。具体步骤如下步骤1攻击者输入恶意脚本攻击者在网站的输入框中输入的不是正常内容而是一段JavaScript代码。例如 scriptalert(你被攻击了)/script步骤2网站将恶意脚本返回到响应体中如果网站没有对用户输入进行过滤或转义就会直接将这段恶意代码插入到网页中。例如网站的欢迎页面会变成 p你好scriptalert(你被攻击了)/script/p步骤3浏览器执行恶意脚本当其他用户访问这个页面时浏览器会将这段HTML代码解析并渲染到页面上。由于script标签内的内容是可执行的JavaScript代码浏览器会自动执行这段代码从而弹出一个警告框显示“你被攻击了”---3.关键点请求体和响应体• 请求体Request Body攻击者通过输入框或其他方式将恶意脚本发送给服务器。这是攻击的“入口”。• 响应体Response Body服务器将用户输入的内容包括恶意脚本返回到网页中。这是攻击的“出口”。XSS攻击的核心就是攻击者通过请求体注入恶意脚本然后让服务器将这些脚本嵌入到响应体中最终在其他用户的浏览器中执行。---4.XSS攻击的类型XSS攻击主要有两种类型存储型XSSStored XSS• 特点恶意脚本被存储在服务器上如数据库中每次其他用户访问页面时都会触发脚本执行。• 例子攻击者在论坛发帖时插入恶意脚本其他用户查看帖子时就会被攻击。反射型XSSReflected XSS• 特点恶意脚本直接通过URL或表单提交到服务器服务器将脚本反射回页面用户访问时触发脚本执行。• 例子攻击者构造一个带有恶意脚本的链接用户点击后脚本会被服务器反射到页面并执行。Django转义处理使用Django处理这种问题有两种选择。1对不信任的变量执行escape过滤这个过滤器会对潜在的危险字符串进行转义。这个方法依赖开发者调用的转义过滤器。鉴于开发者有可能会忘记调用这个过滤器因此网页有可能还是会被攻击。2使用Django自动对HTML文本进行转义。默认情况下Django会对模板中变量的输出进行自动转义这是一个比较理想的处理方式。具体地说5个字符串会被自动转义它们分别如下“”变为“”“”变为“”单引号变为“”双引号变为“”“”变为“”。Django几乎为所有的行为都提供配置转义自然也不例外。有时候模板变量包含开发者打算作为原始HTML呈现的数据那么这时可能希望内容不被转义。要想对单个变量关闭自动转义功能则可以使用safe过滤器如下面的模板代码这个会转义: {{ data }}    这个不会转义: {{ data|safe }}另外也可以控制对模板的自动转义这时要用到autoescape标签这个标签用来将要控制的模板包裹起来例如 {% autoescape off %}这个不会被自动转义{{ data }}.{% autoescape on %}重新开启自动转义 {{ name }}{% endautoescape %}这个也不会被自动转义 {{ other_data }}{% endautoescape %}需要注意的是过滤器是支持字符串作为参数的。这些字符串并不会被自动转义这背后的思想是模板的作者应该控制文本的内容。因此开发者应该确保在编写模板时对文本进行正确的转义。自定义标签和过滤器自定义标签自定义标签和和过滤器应该统一放在放在一个文件当中——为此可以在应用到目录当中创建一个templatetags文件夹myapp/│├── __init__.py├── models.py├── templatetags/│   ├── __init__.py│   └── customize.py├── tests.py└── views.py并且将模块放在customize.py当中完整流程如下1. 创建自定义标签库• 在你的Django应用目录下例如myapp创建一个名为templatetags的文件夹。• 在templatetags文件夹内创建一个空的__init__.py文件使其成为一个Python包。• 在templatetags文件夹内创建一个新的Python文件比如customize.py这将包含你的自定义标签和过滤器。2. 编写自定义标签• 在customize.py文件中你可以定义自定义标签和过滤器。例如创建一个简单的标签 from django import templateregister template.Library()register.simple_tagdef hello_name(name):return fHello, {name}!3. 加载自定义标签• 在你的Django模板文件中使用{% load %}标签来加载你的自定义标签库。假设你的自定义标签库位于myapp/templatetags/目录下你可以这样加载它 {% load customize %}4. 使用自定义标签• 加载标签库后你可以在模板中使用你定义的标签。例如使用上面定义的hello_name标签 p{% hello_name Alice %}/p这将在模板中输出pHello, Alice!/p在Django中编写自定义过滤器与编写自定义标签类似但过滤器用于处理模板变量的值。以下是编写自定义过滤器的步骤自定义过滤器1. 创建自定义过滤器库• 确保你的Django应用目录下有一个templatetags文件夹并且在该文件夹内有一个__init__.py文件。2. 编写自定义过滤器• 在templatetags文件夹内创建一个新的Python文件比如customize.py这将包含你的自定义过滤器。3. 定义过滤器• 在customize.py文件中你可以定义一个或多个过滤器。每个过滤器都是一个函数它接收一个值并返回处理后的值。例如 from django import templateregister template.Library()register.filter(nameupper)def upper(value):return value.upper()register.filter(namelower)def lower(value):return value.lower()在这个例子中我们定义了两个过滤器upper和lower。upper过滤器将输入的字符串转换为大写而lower过滤器将输入的字符串转换为小写。4. 加载自定义过滤器• 在你的Django模板文件中使用{% load %}标签来加载你的自定义过滤器库。例如 {% load customize %}5. 使用自定义过滤器• 加载过滤器库后你可以在模板中使用你定义的过滤器。例如使用上面定义的upper和lower过滤器 p{{ my_string|upper }}/pp{{ my_string|lower }}/p这将在模板中输出 pMY_STRING/ppmy_string/p两者比较它们都是在templatetags目录下创建的都需要使用template.Library()来注册并且都需要在模板中使用{% load %}标签来加载。不过它们的用途和工作方式有所不同自定义标签Tags • 用途自定义标签通常用于执行一些操作比如条件判断、循环等它们可以包含一些逻辑处理。• 工作方式标签通常不返回值而是执行某些操作比如输出HTML代码、调用函数等。• 示例一个自定义标签可能用于显示一个用户列表或者根据某些条件来决定是否显示某些内容。 自定义过滤器Filters • 用途过滤器主要用于修改变量的值比如格式化字符串、转换数据类型等。• 工作方式过滤器接收一个值作为输入处理这个值然后返回处理后的结果。• 示例一个自定义过滤器可能用于将字符串转换为大写或小写或者用于格式化日期。 创建和注册过程无论是标签还是过滤器它们的创建和注册过程都非常相似1. 创建templatetags目录在你的应用目录下创建一个名为templatetags的目录并在其中创建一个Python文件如customize.py。2. 导入template模块在Python文件中导入Django的template模块。3. 创建Library实例创建一个template.Library()的实例并给它一个别名通常是register。4. 注册标签或过滤器使用register.tag装饰器来注册标签使用register.filter装饰器来注册过滤器。5. 定义标签或过滤器定义标签或过滤器的函数这些函数将包含标签或过滤器的逻辑。6. 在模板中加载和使用在模板文件中使用{% load %}标签来加载你的自定义标签或过滤器然后在模板中使用它们。
http://www.pierceye.com/news/377056/

相关文章:

  • 学校网站建设需求分析调研表网站右侧信息跟随左侧菜单栏变化
  • 家乡网站建设策划案邢台哪里建网站
  • 网站建设实习收获青岛网上房地产网站
  • 简述电子政务网站设计的技术企业邮箱是什么类型的账户
  • 深圳网站建设公司元嘉定网站开发
  • 佛山外贸网站建设平台上传网站安装教程
  • c2c网站建设实例德国网站建设
  • 建网站支持设备是什么意思佛山中小企业网站建设
  • 网站建设与管理读后感宁德住房和城乡建设部网站
  • 贸易网站建站建设部网站社保联网
  • 住房城乡建设厅网站准考证如何建小企业网站
  • 葫芦岛市城乡建设局网站做什么样的网站
  • 铜山区规划建设局网站大学生心理咨询网站建设论文
  • 泸州本地网站建设扬州做网站公司
  • 镇江网站建设工作室怎么购买国外的域名
  • 广西南宁电商网站建设找客户信息的软件
  • 信阳网站开发公司2022中国互联网公司市值排名
  • 巨鹿县住房与城乡建设厅网站wordpress内容付费插件
  • 网站设计建设维护wordpress 仿搜狗百科
  • 做网站写的代号好跟不好的区别中国500强企业官网
  • html个人网站wordpress 后台 字数统计
  • 网站开发包括哪些技术网站后台框架模版
  • 济南地产行业网站开发长春网络推广
  • 网站建设全程揭秘网站建设费能抵扣吗
  • 网站开发用什么语言最安全网站的ftp在哪里可以查到
  • 物理结构网站我国网站建设现状
  • 毕设如何做网站tk网站免费
  • 做logo的著名网站一起做网商网站怎么样
  • 楼盘销售管理网站开发资源网站界面设计形考
  • 哪个网站做视频挣钱网络推广方案下拉管家微xiala11