反解析 获取地址
有时候路由会发生改变,那么对应的视图的redirect跳转页面时的路径也要一起改变,为了避免太多的操作,所以使用反解析获取地址后,无论子应用里路由名字怎么变,对应的视图里都可以直接获取到改变后的最新路由
设置
1.总路由 urls里给应用添加别名
2.子应用里给单独的视图起别名
3.在视图中 用reverse获取对应的地址
中间件
django框架 不管是发送request请求前后 还是 返回response响应前 都可以被 MiddleWare 中间件拦截,来添加一些有必要的处理
我们可以自定义中间件
- 在工程目录下 , 创建mymiddleware文件
- 写中间件类 继承MiddlewareMixin
3.在setting里注册
4. 多个中间件执行顺序
- 在视图函数被处理前,中间件由上至下依次执行
- 在视图函数被处理后,中间件由下至上依次执行
配置数据库
- 配置里如果用ip地址访问
- 需要修改mysql库里的user表里的 User字段为root的那条数据的Host字段为%.
查询账户Host信息
select Host,User from mysql.user;
修改
update mysql.user set host = ‘%’ where user = ‘root’;
生成迁移文件
先安装mysqlclient
命令 : pip install mysqlclient -i
可能会报错,因为有依赖环境,可以参考虚拟机Ubuntu安装 mysqlclient 报错
如果解决不了,那就在django里用pymysql 添加如下
现在开始创建一个新的子应用 booktest
在booktest的models里创建 模型类
from django.db import models
class BookInfo(models.Model):
"""图书 一对多 的 一"""
btitle = models.CharField(max_length=20, verbose_name="书名")
bpub_date = models.DateField(verbose_name="发布日期")
bread = models.IntegerField(default=0, verbose_name="阅读量")
bcomment = models.IntegerField(default=0, verbose_name="评论量")
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")
image = models.ImageField(upload_to='bookimage', verbose_name="封面", null=True)
class Meta:
db_table = 'bookinfo'
verbose_name = '书'
def __str__(self):
return self.btitle
class HeroInfo(models.Model):
"""图书 一对多 的 多"""
GENDER_CHOISE = (
(0, 'male'),
(1, 'female')
)
hname = models.CharField(max_length=20, verbose_name="名字")
hgender = models.SmallIntegerField(choices=GENDER_CHOISE, verbose_name="性别")
hdesc = models.CharField(max_length=200, null=True, verbose_name="介绍")
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name="评论量") # 外键 hbook_id
is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")在这里插入图片描述
class Meta:
db_table = 'heroinfo'
verbose_name = '英雄'
def __str__(self):
return self.hname
生成迁移文件
python manage.py makemigrations
执行迁移命令
python manage.py migrate
结果: