【Django】教程-1-安装+创建项目+目录布局介绍
【Django】教程-2-前端-目录布局介绍
4.数据库连接配置
须要手动创建数据库,数据库无法自动创建 ,ORM可以创建表,操纵表
注意:负责app下mondels.py写类时,无法在数据库中创建表。
- 配置 静态文件路径 & 模板的路径templates(发起放在app目录下)
- 配置数据库干系操纵
4.1 第三方模块(django3版本)
- pip install mysqlclient
- # 或者手动下载安装whel包下载下来安装
复制代码
- 自己先去mysql创建一个数据库
- 配置数据库连接,在settings中
- DATABASES ={
- 'default' :{
- 'ENGINE':'djang.db.backends.mysql',
- 'NAME':'gx_day16', # 数据库名字
- 'USER':'root',
- 'PASSWORD':'root123',
- 'HOST':'127.0.0.1', # 对应机器
- 'PORT':'3306'
- }
- }
复制代码 4.2 示例:
- from django.db import models
- class UserInfo(models.Model):
- """ 用户表 """
- name = models.CharField(verbose_name="姓名", max_length=32)
- password = models.CharField(max_lenght=64)
- age = models.IntegerField()
-
- '''
- 相当于创建了下面这个表:表名=应用名+类名
- create table app01_userinfo(
- id bigint_auto_increment primary key,
- name varchar(32),
- password varchar(64),
- age int
- )
- '''
- class Department(models.Model):
- title = models.CharField(max_length=16)
-
- # class Role(models.Model):
- # title = models.CharField(max_lenght=16)
复制代码 前提:app已经注册,目录切换到项目目录下,有manage.py 文件
python manage.py makemigrations
python manage.py migrate
新增列时,须要给予 默认值,status = models.CharField(default=1)
data = models.CharField(null=True, blank=True) 都是空值
- 在app目录下,编写model.py
- from django.db import models
- class Admin(models.Model):
- """管理员"""
- username = models.CharField(verbose_name="用户名", max_length=32)
- password = models.CharField(verbose_name="密码", max_length=64)
- def __str__(self):
- return self.username
- class Department(models.Model):
- """部门表"""
- # id = models.BigAutoField(verbose_name="ID", primary_key=True)
- # id = models.AutoField(verbose_name="ID", primary_key=True)
- title = models.CharField(verbose_name="标题", max_length=32)
- def __str__(self):
- return self.title
复制代码 - 执行两个下令:(删除表,列,都是执行这个下令,如果新建列,已有数据,须要default=xxx,赋值)
- python manage.py makemigrations
- python manage.py migrate
复制代码 5. ORM操纵
- # apps.py 中有,对于主见的添加描述
- from django.apps import AppConfig
- # 需要去settings中注册
- class ApptangConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'appTang'
复制代码 5.1 增
- Department.object.create(title="销售部")
- # 本质 :insert into app01_department(title)values("销售部")
- UserInfo.object.create(name="特朗普", password="123", age=19)
复制代码 5.2 删
- # 全部删除
- UserInfo.object.all().delete()
- # 条件删除
- UserInfo.object.filter(id=3).delete()
复制代码 5.3 查
- # 全部查询, 返回 QuerySet类型对象
- data_list = UserInfo.object.all()
- for obj in data_list:
- print(obj.id, obj.name, obj.password, obj.age)
-
- # 条件查询 , 返回 QuerySet类型对象
- data_list2 = UserInfo.object.filter(id=1)
- # 返回一行obj对象
- data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
- print(data_first.id, data_first.name, data_first.password, data_first.age)
复制代码 5.4 改
- # 全部更新
- UserInfo.object.update(password=999)
-
- # 条件查询 ,更新
- UserInfo.object.filter(id=1).update(age=99)
- # 返回一行obj对象
- data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
- print(data_first.id, data_first.name, data_first.password, data_first.age)
复制代码 如果 表单 get 请求与 post 请求,同一个地址,action属性 可以不写
在这个页面可以直接运行 startapp app01 创建项目 ,然后去注册
- python manage.py makemigrations
- python manage.py migrate
复制代码 可以在下面菜单中,直接输入,更新数据库更方便
makemigrations
migrate
6. 关联关系
models.py 文件
- class Department(models.Model):
- '''部门表 '''
- title =models.CharField(verbose_name='标题',max_length=32)
- class UserInfo(models.Model):
- '''员工表 '''
- name = models.CharField(verbose_name="姓名",max_length=16)
- password = models.CharField(verbose_name="密码",max_length=64)
- age = models.IntegerField(verbose_name="年龄")
- account = models.DecimalField(verbose_name="账户余额",max_digits=18,decimal_places=2,default=8)
- create_time = models.DateTimeField( verbose_name="入职时间")
- #无约束
- #depart_id = models.BigIntegerField(verbose_name=“部门ID")
- #1.有约束
- # - to,与哪张表关联
- # - to_field,表中的那一列关联
- #2.django自动
- # - 写的depart
- # - 生成数据列 depart_id
- #3.部门表被删除
- ## 3.1级联删除
- depart = models.ForeignKey(to="Department", to_field="id", on_delete=models.CASCADE)
- ### 3.2置空
- #depart= models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)
-
- # 在django中做的约束
- gender_choices = (
- (1,"男"),
- (2,"女"),
- )
- gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)
复制代码 部门列表展示,页面调解
7. 放在了上一篇文章结尾部门,由于是前端干系
8.数据处理
8.1 时间格式
后端python
前端:模版语法
- <td>{{ obj.create_time|date:"Y-m-d H:i:s" }}</td>
复制代码 8.2 关联处理,非表
后端python
- # gender_choices = (
- # (1,"男"),
- # (2,"女"),
- # )
- # gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)
- obj.gender
- obj.get_gender_display() # get_字段名_display()
复制代码 前端:模版语法
- <td>{{ obj.get_gender_display }}</td>
复制代码 8.3 关联表处理
后端python
- obj.depart_id # 获取数据库中存储的那个字段值
- obj.depart.title # 根据id自动关联表中的那一行数据depart对象,然后去.title
复制代码 前端:模版语法
- <td>{{ obj.depart.title }}</td>
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |