Django总结:
001.创建一个Django项目:
Python manage.py django XXX;
002.对数据库的操作:
新建:
create databases XXX;
删除:
drop databases XXX;
进入:
use databases db;
查看:
show databases;
003.创建一个数据表:
create table XXX(id int primary key auto_increment not null,name char(32))default varchar(utf8) innodb
004.对数据行的操作:
增:
insert into tb11(name,age) values('XXX',12),('root',18);
insert into tb12(name,age) select name,age from tb11;
查:
select * from table; #查看此表的所有数据
select id from table; #查看此表的所有ID
删:
delete from tb12 where id >=2 or name='XXX'
改:
update tb12 set name='alex',age=19 where id>12 and name='xx'
分页:
select * from tb12 limit 10 offset 20;
排序:
select * from tb12 order by id desc; 大到小
select * from tb12 order by id asc; 小到大
005.链表操作:
select * from userinfo5 right join department5 on userinfo5.part_id = department5.id
select * from userinfo5 innder join department5 on userinfo5.part_id = department5.id
006.临时表:
SELECT num,course_id from (select num,course_id from score where num > 60) as B;
007.链接pymysql:
新建一个App:
Python manage.py startapp Appo1
setting配置:
App配置:
INSTALLED_APPS中激活自己的App名字
数据库配置:
DATABASES={
'default': {
'ENGINE': 'django.db.backends.mysql', #指定要建立连接的数据库
'NAME': 'blind', #数据库的名字
'USER':'root', #登录数据库的用户账号
'PASSWORD':'', #用户密码
'HOST':'localhost', #链接的地址
'POST':3306, #链接的端口
}
}
静态文件配置:
STATICFILES_URLS=(
os.path.join(BASE_DIR.'static'),
)
__int文件:
在int文件里写入数据库替换:pymysql.install_as_MySQLdb()
008.ORM操作:
增:
models.UserGroup.objects.create(name='阿迦罗')
models.UserInfo.objects.create(user='root',password='pwd',age=18,ug_id=1)
删:
models.UserGroup.objects.filter(id=2).delete()
改:
models.UserGroup.objects.filter(id=2).update(name='奥米茄')
查:
group_list = models.UserGroup.objects.all()
group_list = models.UserGroup.objects.filter(id__lt=1)
group_list = models.UserGroup.objects.filter(id__gt=1)
009.models:
F: #在更新时取到原来的值
Q: #用于构造复杂的查询条件
id__in=[11,12,13] #id包含11,12,13
id__gt=13 #id大于13
id__gte=13 #id大于等于13
id__lt=13 #id小于13
id__lte=13 #id小于等于13
count #获取个数
contains #名字内容包含
id__range=[1,2] #id范围
order by('id') #asc
order by('-id') #desc
reverse() #反转
extra #构造额外的查询条件或映射,如:子查询
distinct() #去重
annotate() #用于实现聚合函数的查询
exclude() #条件查询
value() #获取每行数据为字典格式
value_list() #获取每行数据为元组格式
aggregate #聚合函数,获取字典类型的聚合结果
get() #获取单个对象
create() #创建对象
bulk_create() #批量插入
get_or_create() #如果存在,则获取,不存在,则创建
first() #获取第一个
last() #获取最后一个
in_bulk() #根据主键ID进行查找
exists() #是否有结果
select_related #查询主动做联表
prefetch_related #不做联表,做多次查询
models.ManyToManyField #只能创建3列
010.安全机制:
CSRF:POST时,需要用户携带随机字符串
Form
{% csrf_token %}
Ajax
data
cookie中获取,添加到请求头
Cookie:保存在客户端的键值对
可以放很多,包括敏感信息
XSS:不用safe
mark_safe
过滤关键字
Session:保存在服务端的数据(本质是键值对)
应用:依赖cookie
作用:保持会话(Web网站)
好处:敏感信息不会直接给客户端
equest.session:
增伤
获取随机字符串
主动设置超时时间
011.Djangoadmin参数:
DjangoAdmin提供的参数:
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'}
validators 自定义错误验证(列表类型),从而定制想要的验证规则
from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
如:
test = models.CharField(
max_length=32,
error_messages={
'c1': '优先错信息1',
'c2': '优先错信息2',
'c3': '优先错信息3',
},
validators=[
RegexValidator(regex='root_d+', message='错误了', code='c1'),
RegexValidator(regex='root_112233d+', message='又错误了', code='c2'),
EmailValidator(message='又错误了', code='c3'), ]
a. 直接通过
models.Userinfo.objects.create(....)
-- ModelForm
b. 影响Django自带的管理工具admin
012.正反向操作:
正向:
filter() values,values_list() -> 跨表 fk__xxx
objs = all()
for obj in objs:
obj.fk.
反向:
filter() values,values_list() -> 跨表 表名称__xxx
objs = all()
for obj in objs:
obj.表名称_set.all()
013.M2M:
正向(有M2M):
obj = ...
obj.m.add()
obj.m.remove()
obj.m.set()
obj.m.clear()
obj.m.all()...
反向:
obj ...
obj.表名_set.add
014.模板导入:
{% include 'pub.html' %}
{% include 'pub.html' %}
{% include 'pub.html' %}
模板自定义函数:
simple_filter
最多两个参数,方式: {{第一个参数|函数名称:"第二个参数"}}
可以做条件判断
simple_tag
无限制: {% 函数名 参数 参数%}