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

  1. 静态文件(打字熟练写,手腕就不累了)

    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 自动添加

把这个数据库翻译成另一个的数据库语句

posted @ 2019-05-22 13:10  learnacode  阅读(270)  评论(0编辑  收藏  举报