补充第三天跟safe差不多的一个方法

  • templatetags文件夹
      自定义的py文件
需要先导入模块
from django.utils.safestring import mark_safe
@register.simple_tag
def atag(v1,v2):
print(v1,v2)
return mark_safe('<a href=''>百度</a>') html文件
{% atag a b %}
#用mark_safe方法跟safe过滤器是一样的

静态文件配置

  • 1.在项目根目录下创建一个文件夹,名称随便,比如叫作static_file,用来存放我们的静态文件(js/css/图片文件等等)

  • 2.在settings.py配置文件中写上如下内容

      STATIC_URL = '/static/'  #静态文件夹路径别名  随便起
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static_file') #拼接存放静态文件的静态文件夹路径
]

  • 3.使用静态文件配置路径
    三种写法
1.<link rel='stylesheet' href='/static/css/style_css.css'>
2.在html文件中{% load static %}
使用:<link rel ='stylesheet' href="{% static 'css/style_css.css' %}"> #推荐只用第二种
3.在html文件中{% load static %}
<link rel='stylesheet' 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 app01
  • 2.然后再settings.py配置文件中的INSTALLED_APPS这一项配置列表里面,加上应用名称
     INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'app01.apps.App01Config', #全称
'app01', #简写
]
如果没有配置应用,那么在应用中写逻辑时,django框架提供的很多功能,是没有调用的,凡是手动创建的应用,都需要在这里配置一下

ORM

  • object relational mapping,对象关系映射。主要完成的就是数据库操作。
      1.MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
2.ORM是“对象-关系-映射”的简称。(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大,但是别人用不了)
3.类对象--->sql--->pymysql--->mysql服务端--->磁盘,orm其实就是将类对象的语法翻译成sql语句的一个引擎,明白orm是什么了,剩下的就是怎么使用orm,怎么来写类对象关系语句。
  • 总结
      优点:
开发效率高,应用程序开发程序员对类对象关系,比对sql语句要熟练一些
迁移数据库时只需要修改配置,orm就能够帮我们将类对象关系翻译成对应数据库的sql语句
缺点:
效率相对低,因为orm有一个翻译动作,现将orm语句翻译成sql语句,再去数据库里面执行,比直接写的原生sql语句多了一步翻译动作,所以效率相对低一些

创建表

  • 在应用文件夹下的models.py文件中写上如下内容
      from django.db import models
class Book(models.Model):
id = models.AutoField(parimary_key=True) #主键,自增
title = models.CharField(max_length=64,null=True)#不定长64位,可以为空
state = models.BooleanField(default=True)#设置默认值为True 布尔类型
price = models.DecimalField(max_digits=20,decimal_places=5)#总长度20,小数位5位
publish = models.CharFiles(max_length=32) #不定长32位
      对应的sql语句
create table book(
id int primary key auto_increment,
title varchar(64),
state boolean not null default true,
pub_date date not null,
price decimal(20,5) not null,
publish varchar(32) not null
)
  • 类写完之后,执行数据库同步(迁移)指令才能生成表
      python manage.py makemigrations #在应用的migrations文件夹中生成迁移文件(也就是记录文件)
python manage.py migrate #执行对应的记录文件,翻译成sql语句并到数据库中执行对应的sql来创建表

pycharm提供的数据库图形化界面工具的使用

  • SQLite的
      在Database处选择SQLite,然后下载驱动就可以了。
  • mysql的
      第一步:去mysql里面创建一个库
create database orm01 default charset=utf8mb4; 第二步:将setting.py配置文件的DATABASSES配置改成如下内容
#完整连接数据库的指令:mysql -h 127.0.0.1 -p 3306 -u root -p666
DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'orm01', #数据库名
'HOST':'127.0.0.1', #ip
'PORT':3306, #端口
'USER':'root', #数据库用户
'PASSWORD':'666' #自己数据库密码
}
}
#注意:字典中的每一项名称都是固定写法,并且必须都是大写 第三步:指定django连接mysql的python模块
1.下载pymysql
pip install pymysql
2.指定连接模块,需要在项目主目录下的__init__.py文件中来指定,如下
import pymysql
pymysql.install_as_MySQLdb() 第四步:执行数据库同步指令
python manage.py makemigrations
python manage.py migrate 第五步:通过pycharm提供的操作数据库的图形界面工具来连接一下mysql
在左边database里面选择mysql,然后下载驱动,就可以了。 这边下载驱动遇到的一个问题:
Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'。错误原因是时区错误,MySQL默认的时区是UTC时区,比北京晚8个小时,所以要修改mysql的时长。
解决办法:
先登录mysql,然后查看下时区,命令:show variables like'%time_zone';
如果value显示的是SYSTEM,就表示没有设置时区。
设置时区命令:set global time_zone = '+8:00';
执行完命令后,再去连接下载驱动,就可以了。

models添加字段后执行migrations遇到的问题

      You are trying to add a non-nullable field 'state' to book without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option: 出现问题的原因就是,比如新增的state属性对应的字段,默认是不能为空的,如果我们没有设置它的可以为空,或没有给它设置默认值,那么如果数据表中有了几行数据,那么这几行中的新增的这一列数据,就没有办法自动添加数据,orm不知道给你添加什么数据,所以遇到了上面的报错情况,上面的报错请求就是告诉你,给新添加的字段添加默认值,或者设置可以为空才行。 解决办法:
1.直接在提示信息:输入默认值,然后回车
2.退出窗口,在state = models.BooleanField(null=True) 或者 state = models.BooleanField(default='默认值'),然后再执行数据库同步指令

数据库同步指令执行顺序 如下图

模板渲染补充(组件)

  • 组件
      组件就是一个html,其中封装了一些特定功能,比如就是一个导航栏,或者就是一个左侧菜单,想当我们将一些听定功能封装成了一个组件,将来任何其他html文件中如果使用这部分功能,可以直接引入使用。
  • 使用django模板渲染系统中使用组件的步骤
      第一步:创建组件的html文件,名字随便取,比如叫作zujian.html,比如内容如下,做一个顶部导航栏组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>zujian</title>
<style>
.nav{
background-color: blue;
height: 100px;
}
.nav a{
color:white; }
</style>
</head>
<body> <div class="nav">
<a href="">百度</a>
<a href="">京东</a>
<a href="">个人中心</a>
</div>
</body>
</html> 第二步:使用组件,需要借助下面这个标签
{% include '组件文件名称.html' %} 示例:比如我们需要某个html文件中使用,比如show.html文件中使用,show.html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{# <style>#}
{# .nav{#} <!-- 可以修改样式,但是注意权重问题 -->
{# background-color: yellow!important;#} #无敌
{# }#}
{# </style>#}
</head>
<body>
<h1>这是show页面</h1>
{% include 'zujian.html' %} <!-- 在哪里引入组件,组件就生成在页面的对应位置上 -->
</body>
</html>

inclusion_tag 自定义标签

  • 动态组件的应用
      zhujian.html文件内容
<style>
.nav{
background-color: blue;
height: 100px;
}
.nav a{
color:white;
}
</style>
</head>
<body>
<div class="nav">
{% for i in data %}
<a href=''>{{ i }}</a>
{% endfor %}
</div> 注意:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义标签
1.在app中创建templatetags文件夹(文件夹名称必须是templatetags)
2.在templatetags文件夹中创建任意.py文件,比如mytag.py
3.在mytag.py文件中写上如下内容
from django import template
register = template.Library() #制作注册器,名字必须交register
@register.inclusion_tag('zujian.html')
def xiaolin(v1):
#v1 = [11,22,33]
return {"data":v1} 4.使用inclusion_tag,比如在show2.html文件中使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load mytag %} #加载这个py文件
{% xiaolin d %} #引用mytag文件中自定义标签中的函数,并把后台数据d传给它
<h1>这是show2页面</h1>
</body>
</html> 5.需要后台给show2.html传递数据,比如views.py文件写法
def show2(request):
d = ['国产','欧美','日韩']
return render(request,'show2.html',{'d':d})

inclusion_tag的加载流程 重点!!!

      第一步:在视图views.py文件中写入函数,将渲染的数据返回到show2.html.
第二步:show2.html中使用inclusion_tag自定义标签,先加载py文件{% load mytag %},然后{% xiaolin d %}并将数据传递给你在mytag里面定义的自定义标签。
第三步:在mytag文件中,inclusion_tag装饰器将函数的返回值,交给zujian.html去进行模板渲染 @register.inclusion_tag('zujian.html')
第四步:zujian.html拿到数据进行模板渲染,生成模板渲染之后的组件内容
第五步:将渲染后的组件(zujian.html),以include引入组件的形式,返回到使用inclusion_tag的地方,即最后返回到show2.html中,此时show2.html中就有了zujian.html渲染后的组件。

图解inclusion_tag的加载流程

django学习第四天----mark_safe的用法,静态文件配置,用指令创建django项目应用注意点,ORM介绍,创建表执行命令,模板渲染补充(组件),inclusion_tag 自定义标签的更多相关文章

  1. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  2. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  3. 静态文件配置,django连接MySQL,ORM基本操作

    静态文件 什么是静态文件 静态文件是不怎么经常变化的文件,主要针对html文件所使用的到的各种资源. css文件.js文件.img文件.第三方框架文件 django针对静态文件资源需要单独开始一个目录 ...

  4. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

  5. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  6. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  7. Django框架:2、静态文件配置、form表单、request对象、pycharm链接数据库、django链接数据库、ORM框架

    Django框架 目录 Django框架 一.静态文件配置 1.静态文件 2.配置方法 二.form表单 1.action属性 2.method属性 三.request对象 1.基本用法 四.pych ...

  8. Django框架(二)-- 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get

    一.app 在Django中,APP可以用以下类比 大学 --------------------项目 计算机学院------------app01 土木学院 ------------ app02 1 ...

  9. Django框架(二)—— 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get

    目录 app注册.模板配置.静态文件配置.数据库连接配置post和get 一.app 二.模板配置 三.静态文件配置 四.数据库连接配置 五.get请求和post请求 六.新手三件套 七.登录功能案例 ...

  10. day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置

    目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...

随机推荐

  1. RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法

    RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法 背景 今天开始使用自己心的ThinkBook14 的笔记本 因为已经没有了 Linux测试环境供我使用 ...

  2. 公司内部自建DNS的办法 使用私有域名的方法

    最近总是有一个需求,需要自己弄一些服务器域名之类的. 修改hosts总是比较麻烦,所以想了一个简单办法, 自己搭建一个dns服务器, 本来想用最简单的 dnsmasq 但是发现总是不成功, 然后找了另 ...

  3. CentOS firewall简单总结

    CentOS firewall简单总结 简介 防火墙是安全的重要道防线. 硬件防火墙一般部署再内网的边界区域.作为最外层的防护. 但是一般硬件的防火墙会比较宽松. 不然会导致很多业务不可用 软件防火墙 ...

  4. 如何抓取http请求/拦截器用法

    我们都知道postman是模拟接口向服务端发送请求的,在编写请求数据的时候非常 麻烦,那么如果我们可以先抓取该接口后直接使用,就方便的很多 抓取http请求 1.我们打开postman时就会看见右上角 ...

  5. 深度解析C#数组对象池ArrayPool<T>底层原理

    提到池化技术,很多同学可能都不会感到陌生,因为无论是在我们的项目中,还是在学习的过程的过程,都会接触到池化技术.池化技术旨在提高资源的重复使用和系统性能,在.NET中包含以下几种常用的池化技术. (1 ...

  6. 如何安装typescript-如何运行typescript

    如何安装 typescript npm install typescript -g 安装 ts 之前需要安装 node 哈 查看 ts 的版本 tsc -V 我的是 3.6.3 的版本 typescr ...

  7. 【解决了一个小问题】alert manager要怎么样才能触发告警到企业微信上?

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 07-15:花了几个小时仍然是没走通这个流程,把中间结果记 ...

  8. 【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  9. P7031 [NWRRC2016] Anniversary Cake

    题目简述 有一块 \(n \times m\) 的长方形蛋糕.蛋糕上有两个蜡烛,分别用 \((x_1,y_1)\) 和 \((x_2,y_2)\) 表示.现在有一把刀要把蛋糕切成两半,请问切入的终点和 ...

  10. 【3】jupyter notebook【修改主题、字体、字号、代码自动补全、变更工作目录、添加目录插件、解决工具栏隐藏问题、修改默认浏览器、默认打开位置】

    相关文章: [1]Anaconda安装超简洁教程,瞬间学会! [2]Anaconda下:ipython文件的打开方式,Jupyter Notebook中运行.py文件,快速打开ipython文件的方法 ...