阅读:38
在setting中修改:
MySQL数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'books', #你的数据库名称
'USER': 'root', #你的数据库用户名
'PASSWORD': '', #你的数据库密码
'HOST': '', #你的数据库主机,留空默认为localhost
'PORT': '3306', #你的数据库端口
}
}
数据库创建好了我们就要创建模型类
模型类需要继承models.MOdel,虽然Django有邮箱的验证但是我们也要对邮箱进行验证
Django会自动生成我们的主键 在字段中使用primary_key=True 是设置为主键
from django.db import models
class Message(models.Model):
name=models.CharField(max_length=20,verbose_name="姓名")
email=models.EmailField(verbose_name="邮箱")
address=models.CharField(max_length=100,verbose_name="联系地址")
message=models.TextField(verbose_name="留言信息")
class Meta:
# 定义了表的信息
verbose_name="留言信息"
# 后台管理中会显示的信息
verbose_name_plural=verbose_name
#创建表的时候给的名
# db_table="my_message"
数据库我们也配置好了, 模型类我们也配置好了,接下来在数据库中生成表
当我们需要一个user表的时候可以继承AbstractUser
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
GEDER_CHOICES=(
("male","男"),
("female","女")
)
class UserProfile(AbstractUser):
nick_name=models.CharField(max_length=50,verbose_name="昵称",default="")
birthday=models.DateField(verbose_name="生日",null=True,blank=True)
gender=models.CharField(verbose_name="性别",choices=GEDER_CHOICES,max_length=6)
address=models.CharField(max_length=100,verbose_name="地址",default="")
image=models.ImageField(upload_to="head_image/%Y/%m",default="default.jpg")
models=models.CharField(verbose_name="手机号码",max_length=11,unique=True)
class Meta:
# 定义了表的信息
verbose_name = "用户信息"
# 后台管理中会显示的信息
verbose_name_plural = verbose_name
def __str__(self):
if self.nick_name:
return self.nick_name
else:
return self.username
需要在settings中导入当前的app然后还需添加这个就可以了
还需要在setting中添加
AUTH_USER_MODEL="users.UserProfile"
每个类的都有一个共同的字段时,我们可以创建一个父类
使用这个类注意循环引用,我选择了一个不会导入其他模型类的app的model
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
# datetime.now()不调用的原因是实例化的时候不会马上调用now()
class Meda:
abstract=True
想使用这个父类里面的字段我们可以继承父类
需要将这个父类导入进来
from users.models import BaseModel
class CourseResource(BaseModel):
course=models.ForeignKey(Lesson,on_delete=models.CASCADE,verbose_name="课程")
name=models.CharField(max_length=100,verbose_name="名称")
file=models.FileField(max_length=200,upload_to="course/resourse/%Y/%m",verbose_name="下载地址")
class Meta:
verbose_name = "课程资源"
verbose_name_plural = verbose_name
主键
models.ForeignKey(City,on_delete=models.CASCADE,verbose_name="所在城市")
第一个参数另一个模型类名,
on_delete=models.CASCADE 相关数据删除时,这条记录改怎么办CASCADE(删除)
CharField
# 字符串类型
models.CharField(max_length=50,verbose_name="昵称",default="")
max_length:必须传的参数
verbose_name:
default="" 默认为空
unique=True 保证的数据唯一性
null=True 可以为空,配合blank使用
blank=True
DateField/DateTimeField
# 时间类型由用户填写的时间
models.DateField(verbose_name="生日",null=True,blank=True)
#时间类型,自动默认系统时间
models.DateTimeField(default=datetime.now, verbose_name="添加时间")
# datetime.now()不调用的原因是实例化的时候不会马上调用now()
ImageField
models.ImageField(upload_to="head_image/%Y/%m",default="default.jpg")
#upload_to 必传参数,是文件存放的相对路径
max_length: 传不传都可以
注意:Django2只支持MySQL5.5以上的版本
升级MySQL数据库可以去看看我总结的这个博客
MySQL安装教程
我们需要下载一个mysqlclient
也可以在终端直接使用pip下载
如果下载出了问题就使用这个方法
去这里下载第三包:https://www.lfd.uci.edu/~gohlke/pythonlibs/
收获搜索要下载的第三方包
下载下来后保存在一个没有中文路径下
在终端中使用pip install
到这里MySQL就配置完成了,创建完模型类后去生成迁移文件和执行迁移文件就可以生成表了
然后我们在终端中输入以下命令
python manage.py makemigrations
python manage.py migrate
就可看到我们的表就创建成功了
需要导入模型类:
from apps.message_form.models import Message
# 获得结果集
all_message=Message.objects.all()
# 切面操作,打印了可以看到sql语句加上了limit
sliced_query = Message.objects.all()[:1]
#查看sql语句
print(all_message.query)
print(sliced_query.query)
# 过滤filter返回的是结果集
all_memssage=Message.objects.filter(name="笑得好虚伪")
# get返回的是一个对象当没有数据或者多条数据都会报异常
sliced_query =Message.objects.get(name="笑得好虚伪")
# 删除所有的查询结果集
all_message=Message.objects.all()
all_message.delete()
# 删除所有的查询对象
sliced_query =Message.objects.get(name="笑得好虚伪")
sliced_query .delete()
实例化模型类,提交使用save
如果主键存在是更新,不存在是添加
message=Message()
message.name="爱慕虚荣"
message.save()