反向同步,orm创建外键关系,django请求生命周期流程图,路由匹配,无名有名分组与反向解析
Posted on 2022-02-26 16:53 ~sang 阅读(163) 评论(0) 编辑 收藏 举报'''
数据库里面已经有一些表 如何通过django orm操作?
1.照着数据库表字段自己在models.py
数据需要自己二次同步
2.django提供的反向同步
'''
1.先执行数据库迁移命令 完成连接
python manage.py makemigrations
2.查看代码
python manage.py inspectdb
class Userinfo(models.Model):
id = models.IntegerField(blank=True, null=True)
name = models.CharField(max_length=32, blank=True, null=True)
pwd = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'userinfo'
orm创建外键关系
'''
1.表与表之间的关系
一对多
一对一
多对多
2.表关系的判断
换位思考
'''
书籍表 出版社表 作者表 作者详情表
# orm针对外键字段的创建位置
一对多
创建在多的一方
一对一
创建在查询频率较高的表中
多对多
创建在第三张表中
1.class Book(models.Model):
title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2)
# 出版社外键
publish=models.Foreignkey(to='Publish') # 默认是Publish表的主键
'''自动在外键字段后面加_id后缀'''
# 作者外键(多对多)
authors=models.ManyToManyField(to='Author') # 自动创建书籍和作者的第三张表
'''虚拟字段不会在表中实例化出来 而是告诉ORM创建第三张关系表'''
2.class Publish(models.Model):
title=models.CharField(max_length=32)
email=models.EmailField()
3.class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField()
# 一对一外键
author_detail=models.OneToOneField(to='AuthorDetail')
'''自动在外键字段后面加_id后缀'''
4.class AuthorDetail(models.Model):
phone=models.BigIntegerField()
addr=models.CharField(max_length=128)
django请求生命周期流程图
路由层之路由匹配
'''路由可以看成是除去ip和port之后的地址'''
# 自动补全斜杆
APPEND_SLASH=True # 默认是True自动补全斜杆
url()方法
1.第一个参数其实是一个正则表达式
2.一旦第一个参数匹配到了内容直接结束匹配 执行对应的视图函数
url(r'^test/$',views.test)
无名分组&有名分组
# 正则表达式分组:给正则表达式加一个小括号
url(r'^test/(\d+)/$',views.test)
'''
无名分组
将括号内正则表达式匹配到的内容当做位置参数传递给后面的视图函数
'''
url(r'^testadd/(?P<id>\d+)/$',views.testadd)
'''
有名分组
将括号内正则表达式匹配到的内容当做关键字参数传递给后面的视图函数
'''
是否可以结合使用
# 无名有名分组不能混合使用
url(r'^test2/(\d+)/(\d+)/$',views.test2),
url(r'^test2/(?P<id>\d+)/(?P<id1>\d+)/$',views.test2)
# 可以单个重复使用
反向解析
#reverse函数
reverse函数的作用是用来进行url反转的,
有时候我们知道这个视图函数,但是想反转回他的url,这时候就可以通过reverse来实现
当路由频繁变化的时候,html界面上的连接地址如何做到动态解析
# 1.给路由与视图函数对应关系添加一个别名(名字自己指定 只要不冲突即可)
url(r'^index/',views.index,name='index_name')
# 2.根据该别名动态解析出一个结果,该结果可以直接访问到对应的路由
前端
<a href="{% url 'index_name' %}">111</a>
后端
from django.shortcuts import reverse
reverse('index_name')
ps:redirect括号内也可以直接写别名
# 无名反向解析
url(r'^index/(\d+)/',views.index,name='index_name')
后端
reverse('index_name',args=(1,)) # 只要给个数字即可
前端
<a href="{% url 'index_name' 1 %}"></a> # 只要给个数字即可
# 有名反向解析
url(r'^index/(?P<id>\d+)/',views.index,name='index_name')
后端
reverse('index_name',kwargs={'id':666}) # 只要给个数字即可
前端
<a href="{% url 'index_name' id=666 %}"></a> # 只要给个数字即可
'''无名有名都可以使用一种(无名)反向解析的形式'''