57
愚蠢+满足浪费了想象+努力 愚公+天才 己所不欲勿施于人
Django的时间够,有时间去整理以前的,老师说,每提问一个问题,好好想好好答,就像面试一样!不如同学答得好。
作业:图书管理,删除的那个
怎么记住?方法!长期!
昨日回顾:
csrf_token :
是什么: 防御站请求伪造
怎么做:后端django去找一个随机字符串
在加载的页面隐藏了一个input标签里面有随机字符串(html里的{%csrf_token %}) 替换的,
其他数据提交因为验证码不同,不通过,登录不上
模板(模板)继承
写一个模板
继承语法{%extends 'xxx.html' %}
在模板里写一个{%block content%}{%endblock%}
被继承的文件里同样写{%block content%}{%endblock%}
保留:{{block.super}}
面试(流程要打出来,细节打不出来(没事)程序员)
自定义过滤器(至多两个参数)
有些效果加载不出来,就需要自己写过滤器来实现功能
from Django import template
register = template.Library()
@register.filter {{}} {%%}
过滤标签(多个参数)
@register.simple_tag 调用 {%%}
@register.inclusion_tag('html文件')
def aaa():
return {'xx':"xxxx"}
return mark_safe(‘标签格式’) 正常a标签的链接
给应用的html文件渲染 py文件的相同变量 又作为一个组件给另一个html显示
from django.utils.safestring import mark_safe
-
静态文件(打字熟练写,手腕就不累了)
js、css、img 等都叫静态文件,
静态文件一般写在全局,不写在单个应用里,要不每一个应用都要配置。
STATIC_URL = /static/
静态文件的路径STATICFILE_DIRS = [ os.path.join(BASE_DIR,'jingtaiwenjian'), ] (列表可以写多个)
静态文件夹的名称可能会变 , 但是别名不变 不来回改
不能暴露你的文件夹路径
{% load static %}
static 找别名 xx 别名找 路径
写了别名之后 Django默认不支持绝对路径引入
{#不能这样绝对路径写,因为Django规定,让你不写死,预留可以更改的空间。更改别名,html文件不用改路径#}
<link rel="stylesheet" href="/jingtaiwenjian/css/indexcss.css">
都可以
css
<link rel="stylesheet" href="/static/css/indexcss.css">
<link rel="stylesheet" href="{% static "css/indexcss.css" %}">
js
<script src="/static/js/indexjs.js"></script>
img
<img src="/static/img/1.png" alt="">
url 反向解析
url 反向解析的用法
<form action="{% url 'login' %} method="post">
{% csrf_token %}
用户名 <input type="text" name="username">
<input type="submit">
</form>
url(r'^userlogin', views.login,name='login')
view视图反向解析的用法
views 的
from django.urls import reverse
print(reverse('xx')) #'/index/'
# 写死了
# return redirect('/index/')
# return redirect('/xx/') #'/index/'
return redirect(reverse('xx'))# 也可以 内置反向解析
动起来 数据库
静态 : 静态文件 html 模板文件
ORM
(object Relational Mapping)
公司人员划分
大公司(200人以上): 专门的人做专门的事 ,每个人的效率都高,就是要跨部门沟通(牺牲效率)
程序员要写sql,必须经过审核,完全没有问题,才会运行(不会让你跨职业)
(厉害的技术总监和架构师,都能hold住。不好的,随便干,实现功能就行)
小公司(多):都要做 (没有对效率的要求(数据少))所以都要学
应用程序开发人员(开发)
数据库管理人员 (dba)
-
数据库开发(用c语言写 能力非常强)
-
数据库运维的(数据不丢失 效率高)
-
sql开发程序员 (dba来做 专写sql语句 )
-
和python一样的编程语言,只不过是专门操作数据库的
-
视图 封装的 (数据库和前端讲10几天,皮毛,数据库是短板)
-
复杂的语句,即使写出来了,运行也很差,专门的dba写,效率又高,还不复杂
-
他们把服务端全都写好,py开发者只要写你的逻辑
-
pymysql --- cursor.excute(‘call p1()’) 直接使用存储过程
-
cursor.fecthall()
-
Django封装mysql
对象关系映射 (python对应映射的是原生sql)
django内嵌orm
orm ---- django --> 翻译成sql语句 数据库再执 pymysql
- 有翻译 开发效率高了点 执行效率低了点 对效率要求高的话不能用的
- 用原生sql,Django可以操作一些原生 sql 的语句
mysql服务器
硬盘
sqlalchemy 和 orm一样,只不过是独立的,其他框架引入就能用,和jinjia2一样
python manage.py makemigrations
执行指令 , 把数据加载到0001
db
app01
下面的是app01内置的应用 只要应用就有model表
django内置的应用生成的表
把他生成(翻译)对应的sql表
1 去表里找一下有没有过
2 然后执行
INSTALLED_APPS
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes', # 不能注销了 ,有什么app,创建了什么表 其他的内置可以不用
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
app01_book
app01_migrations 记录models发生了哪些变化
- 哪些文件被执行过 执行过的不被执行了
db 中
有值情况:不允许为空还没有默认值 : 默认值 都可以改 (插入的)
没值情况: 可以不用设置(加了一个新表)
删表的时候,把migrations 中的 0001_initial 和 app01_book 都删了
要不无法更新
初始化问题: 库删了 记录删了 (都)
添加:
在更新一下models migrations 就有了2 add
python manage.py makemigrations #生成记录,每次修改了models里面的内容或者添加了新的app,新的app里面写了models里面的内容,都要执行这两条
python manage.py migrate #执行上面这个语句的记录来创建表,生成的表名字前面会自带应用的名字,例如:你的book表在mysql里面叫做app01_book表
可以切换各种 sql数据库(为什么orm效率低,还这么多人用)
auto_now 自动更新
auto_now_add 自动添加
把这个数据库翻译成另一个的数据库语句