s4 model
- Model
Django:
- 路由
- 视图
- 模板
- ORM(类-表;对象-行; pymysql连接数据库)
Torando:
- 路由
- 视图
- 模板
- 自由:pymysql;SqlAchemy
Flask:
- 路由
- 视图
- 模板(第三方的组件)
- 自由:pymysql;SqlAchemy
1.创建数据库
2.setting 配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'s4day70db',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}
3.project下的 __init__
import pymysql
pymysql.install_as_MySQLdb()
4.models.py
from django.db import models
class UserInfo(models.Model):
nid =models.BigAutoField(primary_key=True)
username=models.CharField(max_length=32)
password=models.CharField(max_length=64)
5.注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
6.创建数据库表
命令:
python manage.py makemigrations
python manage.py migrate
7.创建表
class UserGroup(models.Model):
title=models.CharField(max_length=32)
class UserInfo(models.Model):
nid =models.BigAutoField(primary_key=True)
user=models.CharField(max_length=32)
password=models.CharField(max_length=64)
# age=models.IntegerField(null=True)
age=models.IntegerField(default=1)
# ug_id
ug=models.ForeignKey('UserGroup',null=True)
# 默认使用SQLlite数据库
# ORM利用第三方工具pymysql链接数据库
# 操作mysql默认使用mysqldb,python3中需要修改链接Mysql方式
- ORM操作表
创建表
修改表
删除表
- 操作数据行
增删改查
- 字段类型
- 字符串
EmailField(CharField):
IPAddressField(Field)
URLField(CharField)
SlugField(CharField)
UUIDField(Field)
FilePathField(Field)
FileField(Field)
ImageField(FileField)
CommaSeparatedIntegerField(CharField)
a. 直接通过
models.Userinfo.objects.create(....)
# ModelForm
b. 影响Django自带的管理工具admin
- 时间类:
models.DateTimeField(null=True)
- 数字:
num = models.IntegerField()
num = models.FloatField()
mum = models.DecimalField(max_digits=30,decimal_places=10)
- 枚举(Django):
color_list = (
(1,'黑色'),
(2,'白色'),
(3,'蓝色')
)
color = models.IntegerField(choices=color_list)
# 自己操作:自己取,自己用
# 给Django admin使用
# 应用场景:选项固定
# FK选项动态
- 字段参数:
null=True,
default='1111',
db_index=True,
unique=True
class Meta:
# unique_together = (
# ('email','ctime'),
# )
# index_together = (
# ('email','ctime'),
# )
# 联合唯一索引
# 联合索引
- DjangoAdmin提供的参数:
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
# 优先级较低,低于ModelForm
字典健: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_112233\d+', message='又错误了', code='c2'),
EmailValidator(message='又错误了', code='c3'), ]
- 不考虑django admin
- 字段:
username=models.CharField(max_length=32)
username=models.IntegerField()
username=models.DecimalField()
username=models.DateTimeField()
username=models.DateField()
color_list=(
(1,"黑色"),
(2,"白色"),
(3,"蓝色"),
)
color =models.IntegerField(choices=color_list)
- 参数:
null=True
default ='xx'
db_index =True
unique =True
primary_key =True
max_length =12
claas Meta:
# unique_together=(
# ('email','ctime'),
# )
# index_together=(
# ('email','ctime'),
# )
- 考虑 django admin
- 字段:做正则验证
邮箱
IP
URL
UUID
。。。
- 参数:
blank
error _message={}
validators =[] 自定义正则
- 操作总结:
- 增删改查
- filter(),update(),create() 可以使用字典:**
- all() values() values_list()
- FK
正向:
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()
- M2M:
- M2M
- 自定义
- M2M+自定义
正向(有M2M):
obj = ...
obj.m.add()
obj.m.remove()
obj.m.set()
obj.m.clear()
obj.m.all()...
反向:
obj ...
obj.表名_set.add
...
M2M+自定义
obj.m.clear()
obj.m.all()...
- 别名:
# class UserType(models.Model):
# title = models.CharField(max_length=32)
#
# class User(models.Model):
# username=models.CharField(max_length=32)
# ut =models.ForeignKey('UserInfo',related_name='users')
# 反向:
# related_name='xxxx'
# user_set ===> xxxx
# related_query_name='xxxx'
# user_set ===> xxxx_set