django入门与实践教程.PDF,django3.0入门与实践
django学习的第4天mark _ safe的使用、静态文件配置、带说明创建django项目的应用点、ORM介绍、创建表格和执行命令、模板渲染补充(组件)、inclusion_tag自定义标签_ wx 62 aae 4 be 59 a 4的技术博客_博客
django学习的第4天mark _ safe的使用、静态文件配置、使用说明创建django项目的应用笔记、ORM介绍、创建执行命令的表格、模板渲染补充(组件)、inclusion_tag自定义标签
添加一个类似于第三天安全:templatetags文件夹自定义py文件的方法
您需要首先导入模块。
从django.utils.safestring导入mark_safe
@register.simple_tag
def atag(v1,v2):
打印(v1,v2)
Mark _ safe (a href= Baidu /a )
Html文件
{% atag a b %}
#使用mark_safe方法是与安全过滤器相同的静态文件配置。1.在项目根目录下创建一个任意名称的文件夹,比如static_file,用来存放我们的静态文件(js/css/image文件等。)
2.在settings.py配置文件中写入以下内容:STATIC_URL=/static/ #静态文件夹路径的别名可以随意创建。
STATICFILES_DIRS=[
Os.path.join (base _ dir, static _ file) #拼接存储静态文件的静态文件夹的路径。
]
3.以三种方式使用静态文件配置路径。
1.link rel= style sheet href=/static/CSS/style _ CSS . CSS
2.在html文件{% load static %}中
use:linkrel= style sheet href= { % static CSS/style _ CSS . CSS % } #只推荐第二种。
3.在html文件{% load static %}中
link rel= style sheet href= { % get _ static _ prefix % } CSS/style _ CSS . CSS
js文件简介
script src=/static/js/xx . js//script
4.外部引入js文件引起的问题。当外部引入html文件中的js代码,并且js代码中有字符串需要替换(即模板渲染)时,通过外部引入将JS代码引入html时,渲染效果不会生效。
原因:第一,后台数据传入html文件替换模板渲染字符串,自上而下执行。html中js处的模板渲染没有找到,就是js代码还是没有调用,所以无法渲染。当浏览器加载运行代码时,发送调用js代码的请求。此时模板渲染的时间已经过了,所以渲染不成功。
解决方法:只能用html写需要模板渲染的js代码,不要用外部引入。使用说明创建django项目应用说明1。首先,在项目目录中执行以下命令python manage.py startapp app012。然后添加应用程序名称INSTALLED_APPS=[
django.contrib.admin ,
django.contrib.auth ,
django.contrib.contenttypes ,
django.contrib.sessions ,
django.contrib.messages ,
django.contrib.staticfiles ,
# app 01 . apps . app 01配置,#全名
App01 ,#缩写
]
如果没有配置应用程序,那么在应用程序中编写逻辑时,django框架提供的很多函数都不会被调用。所有手动创建的应用程序都需要在这里配置ORMobject关系映射。主要任务是数据库操作。1.MVC或MVC框架中包含了一个重要的部分,就是ORM,它实现了数据模型和数据库的解耦,即数据模型的设计不需要依赖于某个特定的数据库,数据库可以通过简单的配置轻松替换,大大减少了开发人员的工作量,也不需要面对数据库变更带来的无效劳动。
2.ORM是“对象-关系-映射”的缩写。(对象关系映射,简称orm)(以后会学一个sqlalchemy,和他很像,但是django的ORM并不是独立的给别人用。虽然比sqlalchemy强大,但是别人用不了)
3.类对象- sql - pymysql - mysql服务器-磁盘。orm实际上是一个把类对象的语法翻译成sql语句的引擎。知道了orm是什么,剩下的就是如何使用orm,如何编写类对象关系语句。优势概述:
开发效率高,应用开发程序员比sql语句更精通类对象关系。
我们在迁移数据库的时候,只需要修改配置,orm就可以帮我们把类对象关系翻译成对应数据库的sql语句。
缺点:
效率比较低,因为orm有一个翻译动作。现在orm语句被翻译成sql语句,然后在数据库中执行,比直接写的原生sql语句多了一步。所以效率比较低。创建一个表,并在django.db导入模型的应用程序文件夹下的models.py文件中写入以下内容。
课堂用书(模型。型号):
id=models . autofield(pari Mary _ key=true)#主键,自增
title=models . charfield(max _ length=64,null=true) #长度为64位,可以为空。
State=models.boolean字段(默认值=True) #将默认值设置为true Boolean类型
price=models . decimal field(max _ digits=20,decimal _ places=5) #总长度为20,有5位小数位。
publish=models . char files(max _ length=32)#对应32位可变长度的sql语句
创建表格簿(
id int主键auto_increment
标题varchar(64),
状态布尔值不为空默认为真,
发布日期日期不为空,
价格小数(20,5)不为空,
publish varchar(32)不为空
)编写完类后,执行数据库同步(迁移)指令生成表python manage.py makemigrations #在applied migrations文件夹中生成迁移文件(即记录文件)。
Python manage.py migrate #执行相应的记录文件,将其翻译成sql语句,并在数据库中执行相应的sql来创建表。pycharm提供了数据库图形界面工具。使用SQLite在数据库中选择SQLite,然后下载驱动程序。mysql第一步:去mysql,创建一个库。
create database or m01 default charset=utf8mb 4;
步骤2:将setting.py配置文件的DATABASSES配置更改为以下内容
#完整数据库连接的说明:MySQL-h 127 . 0 . 0 . 1-p 3306-u root-P666
数据库={
默认:{
引擎: django.db.backends.mysql ,
名称: orm01 ,#数据库名称
主机: 127.0.0.1 ,#ip
端口:3306,#端口
用户: root ,#数据库用户
密码: 666 #自己的数据库密码
}
}
#注意:字典里每个名字都是固定写法,必须大写。
第三步:指定django连接mysql的python模块。
1.下载pymysql
pip安装pymysql
2.指定连接模块,需要在__init__中指定。项目主目录下的py文件,如下所示
导入pymysql
pymysql.install_as_MySQLdb()
步骤4:执行数据库同步指令。
python manage.py进行迁移
python manage.py迁移
第五步:通过pycharm提供的图形界面工具连接mysql来操作数据库。
在左边的数据库里选择mysql,然后下载驱动,就这样。
此处下载驱动程序遇到的问题:
服务器返回无效时区。转到“高级”选项卡并设置“服务器时间”.原因是时区不对。mysql的默认时区是UTC时区,比北京晚8小时,所以MySQL的时长要修改。
解决方案:
先登录mysql,然后查看时区。命令:显示类似“%time_zone”的变量;
如果value显示SYSTEM,则意味着没有设置时区。
Set时区命令:set global time _ zone= 8:00 ;
执行完命令后,连接下载驱动,就这样了。在模型中添加字段后执行迁移时遇到问题您正在尝试将不可为空的字段“state”添加到没有默认值的帐簿中;我们不能这样做(数据库需要一些东西来填充现有的行)。
请选择一个修复:
1)现在提供一次性默认值(将在所有现有行上设置,并且此列为空值)
2)退出,让我在models.py中添加一个默认值
选择一个选项:
问题的原因是,比如新增加的state属性对应的字段默认不能为空。如果我们不将其设置为空或者为其设置默认值,那么如果数据表中有多行数据,就没有办法自动将数据添加到这些行中的这个新添加的数据列中。orm不知道给你添加什么数据,就遇到了上面的报错情况。上面的错误报告请求是告诉你把默认值添加到新添加的字段中。
解决方案:
1.直接在提示符下:输入默认值,然后按回车键。
2.退出窗口,并在state=models中执行数据库同步指令。布尔字段(null=true)或状态=模型。布尔型字段(默认值= default )。数据库同步指令的执行顺序如下图所示。
模板补充(组件)组件组件是一个html,其中封装了一些特定的功能,比如导航栏或者左侧菜单。我觉得当我们把一些监听功能封装成一个组件的时候,如果这部分功能以后用在其他任何html文件中,都可以直接引入使用。使用django模板渲染系统所用组件的步骤第一步:创建组件的html文件,可以任意命名,比如zujian.html。比如内容如下,做一个顶部导航栏组件。
!声明文档类型
html lang=en
头
meta charset=UTF-8
标题祖鉴/标题
风格。导航{
背景色:蓝色;
高度:100px
}。导航a{
颜色:白色;
}
/风格
/头
身体
差异
A href= 百度/a
a href= JD.COM/a
A href= 个人中心/a
/div
/body
/html
步骤2:要使用组件,您需要以下标签的帮助。
{% include 组件文件名. html“% }
例如:例如,我们需要在一个html文件中使用它,如show.html文件。show.html文件的内容如下:
!声明文档类型
html lang=en
头
meta charset=UTF-8
标题标题/标题
{# style #}
{# .导航{#}!-可以修改样式,但是注意重量问题-
{#背景色:黄色!重要;#} #无敌
{# }#}
{# /style #}
/头
身体
H1这是展示页/h1
{% include zujian.html %}!-在引入组件的地方,组件在页面的相应位置生成-
/body
/html inclusion_tag自定义标记动态组件应用程序zhujian.html文件内容
风格。导航{
背景色:蓝色;
高度:100px
}。导航a{
颜色:白色;
}
/风格
/头
身体
差异
{% for i in data %}
a href= {{ i }} /a
{% endfor %}
/div
注意:在设置中的INSTALLED_APPS中配置当前应用,否则django找不到自定义标签。
1.在应用程序中创建templatetags文件夹(文件夹名称必须是templatetags)
2.创造任何。templatetags文件夹中的py文件,如mytag.py
3.在mytag.py文件中写入以下内容
从django导入模板
注册=模板。Library() #做个登记簿,名字必须上交登记簿。
@ register . inclusion _ tag( zujian . html )
def小林(v1):
#v1=[11,22,33]
return {data:v1}
4.使用inclusion_tag,比如在show2.html文件中。
!声明文档类型
html lang=en
头
meta charset=UTF-8
标题标题/标题
/头
身体
{% load mytag %} #加载此py文件
{% xiaolin d %} #引用mytag文件中自定义标签中的函数,将后台数据D传递给它。
H1这是节目2页/h1
/body
/html
5.你需要在后台发送数据到show2.html,比如views.py文件的编写。
定义显示2(请求):
D=[国内,欧美,日韩]
return (request, show2.html ,{d: d}) inclusion _ tag加载过程的重点!步骤1:在view views.py文件中编写一个函数,将渲染后的数据返回给show2.html。
第二步:使用show2.html的inclusion_tag自定义标记,首先加载py文件{% load mytag %},然后{% xiaolin d %}并将数据传递到您在mytag中定义的自定义标记。
第三步:在mytag文件中,inclusion_tag decorator将函数的返回值交给zujian.html进行模板渲染@ register . inclusion _ tag( zujian . html )
步骤4:zujian.html获取模板渲染的数据,模板渲染后生成组件内容。
第五步:将渲染后的组件(zujian.html)以include into组件的形式返回到使用include _ tag的地方,也就是最后返回到show2.html。此时,zujian.html的渲染组件在show2.html。说明inclusion_tag的加载过程
-
签名:代码过万,键盘坏了!
如果你觉得这篇文章对你帮助不大,记得“推荐”一下。在此感谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。