python框架django文档_Django基础——Django框架介绍及模板语言

Django框架,我们只需要关心二点:

1.根据用户访问不同的路径执行不同的函数

2.从HTML读取出内容,并且完成字符串的替换

而socket通信不需要我们自己写;

新建Django项目

命令行创建:

django-admin startproject mysite

pycharm创建:

1. File --> New project --> 左侧选Django --> 右侧填第二个项目路径,并且勾选python.exe

设置Django项目:

1. settings.py

1. 配置HTML文件存放的位置(Templates)

2. 配置静态文件(CSS/JS/图片)存放的位置

3. 注释掉setting.py中 带有 csrf 的那一行。

Django项目的启动:

1. 命令行启动

在项目的根目录下(也就是有manage.py的那个目录),运行:

python3 manage.py runserver IP:端口--> 在指定的IP和端口启动

python3 manage.py runserver 端口 --> 在指定的端口启动

python3 manage.py runserver --> 默认在本机的8000端口启动

2.PyCharm启动

点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)

MVC是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点;

MVC中的控制器可以看做是Django中的urls.py和views.py(不同路径对应的不同的函数,并且执行函数);视图可以看做是templates(存放html文件的);模型相当于models.py(在数据库中生产表的)

而Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

如下图:

Django中的APP:

什么是APP?以及为什么要用APP?

project --> 项目 (学校)

APP --> 应用 (Linux学院/Python学院/大数据学院/Java学院)

用APP就是为了方便 我们在一个大的Django项目中,管理实现不同的业务功能.

创建app

python3 manage.py startapp my_app

Django生命周期的流程图:

Django模板系统(详细点我)

模板系统本质上就是(在html文件中进行字符串替换);

语法:

{{ 变量 }} ;{% %}则是逻辑相关用的;

1. 变量相关: {{ name }},{{name|length}},{{name|default:"默认值"}}

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

过滤器的语法: {{ value|filter_name:参数 }}

使用管道符"|"来表示过滤器(filters)。

下面是内置的过滤器:

1.default :

如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。

2.length:

返回值的长度,作用于字符串和列表。

3.filesizeformat:

将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)

4.slice

切片

date

日期格式化

{#{{ JS_html|safe }}#}

{{ JS_html }}

{{ name }}

{{ now|date:"Y-m-d H:i:s" }}

{{ text }}

{{ text|truncatechars:18 }}

文件大小:{{ size|filesizeformat }}

5. safe --> XSS攻击(跨站脚本攻击)

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,用户输入的信息如果是js的话,进行自动的转义后网站有可能会受到攻击。因此把js的语法标签 转为字符串了;如果告诉Django这个代码是安全的,就会自动转义为相应内容;但是不告诉,则会转变为字符串;

value = "点我"

{{ value|safe}}

6. truncatechars:20 --> 截取字符,超过的用...表示

如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

参数:截断的字符数

{{ value|truncatechars:9}}

自定义的filter

1. 定义阶段

1. 在app下面新建一个python的包:templatetags

2. 在上面的Python包中新建一个Python文件,名字随意

3. 在上述python文件中:

from django import template

# 生成一个注册用的实例

register = template.Library()

# 定义并注册一个自定义的filter函数

@register.filter(name='addsb')

def add_sb(arg):

return "{} sb".format(arg)

from django import template

register = template.Library()

# 自定义filter函数方法

# 告诉Django的模板语言我现在有一个自定义的filter方法名

@register.filter(name="addstr")

def add_str(arg,arg2): #自定义的filter 函数的 方法 只能有 两个参数;

"""

:param arg: 第一个参数永远是管道符(|)前面的变量

:param agr2: 方法:变量;冒号后面的变量

:return:

"""

return "{},{}".format(arg,arg2)

自定的filter函数只能传入一个变量(就是冒号后面的变量) ;

而simple_tage 可以传入多个值;inclusion_tag可以返回一段html的代码(比如返回url标签)

如下:

#simple_tag 指定的方法可以传入多个值

@register.simple_tag(name="add_sum")

def add_sum(arg,arg1,arg2,arg3):

return "{}+{}+{}+{}".format(arg,arg1,arg2,arg3)

# inclusion_tag 自动的帮 你把函数的返回值 替换到你指定的html里面,

# 然后把结果最后的返回给调用函数的地方;

@register.inclusion_tag("incolusion_demo.html")

def show_results(n):

n=1 if n<1 else int(n)

data = ["第{}次".format(i) for i in range(1,n+1)]

return {"data":data}

2. 调用阶段:

1. 在Django的模板文件中,导入刚才新建的python文件

{% load py文件名 %}

2. 按照filter的语法调用

{{ name|addsb }}

{#在调用自己写的方法的时候需要用load调用app里面的templatetags里面的文件#}

{% load myfilter %}

{{ name|addstr:"张映雪" }}

{% load my_simple_tag %}

{% add_sum "张映雪" "张映雪" "张映雪" "张映雪" %}

{% show_results 5 %}

2. 逻辑相关:

1. if判断

{% if a > b %}

{% endif %}

{% if a > b %}

{% else %}

{% endif %}

{% if a > b %}

{% elif %}

{% else %}

{% endif %}

2. for循环

1. for循环的基本用法:

{% for i in name_list %}

{{ i }}

{% endfor %}

{% for i in name_list %}

{{ i }}

{% empty %} #如果没有数据 则会执行empty后面的语句

空空如也

{% endfor %}

2. for循环可用的属性:

forloop.counter (从1开始计数)

forloop.counter0(从0开始计数)

forloop.revcounter(从1反向计数)

forloop.revcounter0(从0反向计数)

forloop.first       当前循环是不是第一次循环

forloop.last      当前循环是不是最后一次循环

这两个返回pool值

forloop.parentloop --> 两层for循环,内层循环引用外层循环

模板中支持的写法:

{# 取l中的第一个参数 #}

{{ l.0 }}

{# 取字典中key的值 #}

{{ d.name }}

{# 取对象的name属性 #}

{{ person_list.0.name }}

{# .操作只能调用不带参数的方法,并且方法后面不需要() #}

{{ person_list.0.dream }}

1. 母版和继承

1. 为什么要有模板和继承:

把多个页面公用的部分提取出来,放在一个 母版 里面。

其他的页面只需要 继承 母版就可以了。这样方便;

2. 具体使用的步骤:

1. 把公用的HTML部分提取出来,放到base.html文件中

2. 在base.html中,通过定义block,把每个页面不同的部分区分出来

3. 在具体的页面中,先继承母版{% extends "base.html(母版的html)" %}

4. 然后block名去指定替换母版中相应的位置

母版(框架):

{# 下面是用来替换的 #}

{% block page_content %}

{% endblock %}

继承母版的新的html

{#继承母版#}

{% extends "base.html" %}

{#把自己的页面内容 放入到母版里面的blck的位置里面#}

{% block page_content %}

{# 里面就是所替换的内容#}

{% endblock %}

{% block book_active %}

active

{% endblock %}

3. 使用母版和继承的注意事项:

1. {% extends 'base.html' %} --> 母版文件:base.html要加引号

2. {% extends 'base.html' %}必须放在子页面的第一行!!!

3. 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块

{% block page_css %}

{% endblock %}

{% block page_js %}

{% endblock %}

4. view.py相应的函数中返回的是对应的子页面文件 不是 base.html

组件:

可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

{% include 'navbar.html' %}

静态文件相关的

{% load static %}

Hi!

某个文件多处被用到可以存为一个变量

{% load static %}

{% static "images/hi.jpg" as myphoto %}

{% load static %}

Hi!

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

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

相关文章

Mybatis常用总结:参数,返回,执行sql,include等

1.参数注入1.1用#{0},#{1}的形式&#xff0c;0代表第一个参数&#xff0c;1代表第二个参数  public List<RecordVo> queryList(String workerId, Integer topNum); <select id"queryList" resultType"com.demo.RecordVo">     SELECT ID…

下拉框控件、列表控件、ComboBox

delphi 列表组件ComboBox TComboBox组件的重要属性CharCase--------此属性用于设置编辑框内文字的大小写DropDownCount---此属性用于设置当用户下拉组合框时不需要加滚动条就能显示的项的个数DroppedDown-----如组合框当前被下拉&#xff0c;此属性返回TrueItemHeight------此属…

ManualResetEvent实现线程的暂停与恢复

背景前些天遇到一个需求&#xff0c;在没有第三方源码的情况下&#xff0c;刷新一个第三方UI&#xff0c;并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候&#xff0c;停止刷新并语音提示&#xff0c;否则继续刷新。分析这个需求&#xff0c;发现需要控制一个刷新循环…

java反射异常之java.lang.NoSuchFieldException: school

今天调用下面的代码的时候 Field schoolField studentClass.getField("school");schoolField.setAccessible(true);schoolField.set(null, "中南林科大");System.out.print("school:" student.getSchool()); 爆出java.lang.NoSuchFieldExcept…

浙大哈佛剑桥学者联手破解数学界几十年的谜题,成果登上数学顶刊

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;量子位作者&#xff1a;边策 萧箫当两个看似“无关”的数学领域发生碰撞&#xff0c;会发生什么&#xff1f;浙江大学研究员、中科大数学系2003级校友叶和溪&#xff0c;与来自剑桥大学、哈佛大学的两位学者一起&#xf…

pythontemp_python 临时文件夹 的 tempfile模块学习

python的临时文件夹的tempfile模块学习应用程序经常要保存一些临时的信息&#xff0c;这些信息不是特别重要&#xff0c;没有必要写在配置文件 里&#xff0c;但又不能没有&#xff0c;这时候就可以把这些信息写到临时文件里。其实很 多程序在运行的时候&#xff0c;都会产生一…

Hibernate 参数设置一览表

Hibernate 参数设置一览表属性名用途hibernate.dialect一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect hibernate.show_sql输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为d…

jsp将鼠标放到那显示信息

将下面的代码&#xff0c;粘贴复制到jsp<body></body>中<A href"#" οnmοuseοver"document.getElementById(aaa).style.display" οnmοuseοut"document.getElementById(aaa).style.displaynone">鼠标移动到这我就出来了&l…

Monkey测试实例

Monkey是Android中的一个命令行工具&#xff0c;可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等)&#xff0c;实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。1…

.NET Core Runtime vs .NET Framework Runtime

在我从 .NET Framework 到 .NET Core 的过渡期间&#xff0c;有一件事情让我很长时间都感到困惑&#xff0c;那就是 Runtime 运行时&#xff0c; 实际上 Runtime 在 .NET Framework 和 .NET Core 中具有不同的含义。.NET Framework 运行时的历史 当有人问我们&#xff0c;什么是…

linux下ctrl 常用组合键

Ctrlc 结束正在运行的程序 Ctrld 结束输入或退出shell Ctrls 暂停屏幕输出【锁住终端】 Ctrlq 恢复屏幕输出【解锁终端】 Ctrll 清屏&#xff0c;【是字母L的小写】等同于Clear Ctrla 切换到命令行开始 Ctrle 切换到命令行末尾 Ctrlu 清除剪切光标之前的内容 Ctrlk 清除剪切光标…

“玻璃大王”曹德旺捐资100亿办大学!幼年失学的他要打造理工科研究型大学...

全世界只有3.14 % 的人关注了爆炸吧知识本文转自募格学术整理自&#xff1a;量子位&#xff08;作者贾浩楠、鱼羊&#xff09;、青塔等100亿投资&#xff0c;福建省迎来第一个“新型大学”。办学资金&#xff0c;来自生长于福建&#xff0c;在福建发家致富的“玻璃大王”曹德旺…

python进程join的用法_python 进程介绍 进程简单使用 join 验证空间隔离

一、多道程序设计技术(详情参考&#xff1a;https://www.cnblogs.com/clschao/articles/9613464.html)所谓多道程序设计技术&#xff0c;就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存&#xff0c;并允许它们交替在CPU中运行&#xff0c;它们共享系统中的各…

北京易维清的自荐

北京易维清是什么东西呢&#xff0c;是一家以asp.net、winform、MVC源代码生成器为主打产品&#xff0c;同时兼顾信息管理系统项目开发的信息技术公司&#xff0c;更多信息可以访问www.evkchina.com 不过这里不是北京易维清的广告也不是产品说明书&#xff0c;广告什么的都是浮…

PHP的学习--PHP的闭包

php的闭包&#xff08;Closure&#xff09;也就是匿名函数&#xff0c;是PHP5.3引入的。 闭包的语法很简单&#xff0c;需要注意的关键字就只有use&#xff0c;use是连接闭包和外界变量。 $a function() use($b) {} 简单例子如下&#xff1a; function callback($fun) { $fun(…

JAVA配置Tomcat

1.下载tomcat&#xff0c;我jdk是1.8的&#xff0c;网上查了一下&#xff0c;说要安装tomcat8及以上的tomcat 尝试点击&#xff0c;弹出&#xff0c; 2.配置环境 3.安装通过cmd安装 4.点击开启服务 5.输入localhost:8080查看 6.还可以通过tomcat8w.exe来启动窗口&#xff0c;开…

如何使用 C# 判断一个文件是否为程序集

程序集是经由编译器编译得到的&#xff0c;供 CLR 进一步编译执行的那个中间产物。它一般表现为 .dll 或者是 .exe 的格式&#xff0c;但是要注意&#xff0c;它们跟普通意义上的 WIN32 可执行程序是完全不同的东西&#xff0c;程序集必须依靠 CLR 才能顺利执行。程序集是 .NET…

Android之手机文件夹目录详解

android系统的手机文件夹目录详解一、文件夹1./acct/系统回收站&#xff0c;删除的系统文件。2./cache/缓存3./data/用户的所有程序相关数据app/所有用户安装的apk文件app-private/data/每一个应用的数据com.xx.appname/每一个应用的数据都存放在本目录下的一个以包名为命名的文…

女孩看男孩VS男孩看女孩

1 这波猫粮我吃了&#xff01;2 论一只狗子的自娱自乐精神&#xff01;3 分享一个 “想死你了”的拥抱&#xff01;4 老师&#xff1a;下课铃不代表这节课上完了5 谁怕谁啊&#xff01;6 好像很有道理的样子7 将它们展开会是什么&#xff1f;你点的每个赞&#xff0c;我都认真当…

利用js对table动态增加和删除行(附带table样式,鼠标滑过和点击样式)

看了一下午各种大牛关于js动态画表的文章&#xff0c;自己也手痒写了一个。附带了一些table的样式&#xff0c;鼠标滑过和选择的样式。有用的拿去参考&#xff0c;有意见和想法的也随时欢饮交流&#xff0c;本人只是用firefox和IE11测试可用。下面是htm代码&#xff1a;<bod…