图书管理系统的 表 设计
图书管理系统分别有三张表 作者表 书籍表 出版社表 他们 的对应关系为
如何在 Django中建立表与表之间的关系?
首先我们需要在 app文件里 的 models创建出 这三张表 然后做对应关系
复习Django的操作: 1.创建好app后需要 将app添加到INSTALLED_APP = [] 里面
2.在Django中添加mysql数据库 >>>点击 侧边栏中的 database >>>然后左上角的加号 >>> 点击 Data source (数据来源) >>>选择mysql
3.在app文件 或者 Django文件下的 __init__文件里 导入 pymysql 文件 使用 pymysql.install_as_Mysqldb() 代码来指定使用的模块
4.需要在配置文件里 修改 Django默认使用连接数据库的模块 改为 pymysql 在settings文件里找到 DATABASES 如图4修改:
注意 需要 先下载她让下载的驱动(driver) 文件 然后选择 driver 5.1 启动就行了
# Create your models here. class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) price = models.IntegerField(null=True) # 多对多 author = models.ManyToManyField(to=‘Author‘) publish = models.ForeignKey(to=‘Publish‘) class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) class Publish(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32)
使用代码来创建表与表之间的关系
一对多 ForeignKey(to=‘Publish‘)
一对一 OneToOneField(to=‘AuthorDetail‘)
多对多 ManyToManyField(to=‘Author‘)
最后强调! 只要牵扯到models及数据库操作字段 后 必须 要数据库 迁移
代码 python3 manage.py makemigrations
python3 manage.py migrate
Django请求生命周期图
路由层
我们会发现 在 urlpatterns (patterns 花样 模型 形态)中的 url(......,) 的第一个参数 是一个正则表达式
且 先记住 在 浏览器 输入的 后缀 一旦匹配到了 内容 就不会 往下继续匹配 而是 直接执行相应的视图函数 好比如:
url(r‘^data/‘, 功能) url(r‘^datasssss/, 功能‘) 他就会 直接执行 data相应的视图函数
斜杆
Django在路由匹配的时候 当你没有在 浏览器中敲最后的斜杆时 django会先拿着你没有敲斜杆的内容去匹配 如果没有 匹配上 会让浏览器 在末尾 添加斜杆后 再次发一次 请求在匹配 如果还是匹配不上的话就会报错!
如果你想取消该机制 不想做二次匹配的话 可以在 settings文件中指定
APPEND_SLASH = False # 默认参数是True slash(斜线)
无名分组
url(r‘^test/([0-9]{4})/‘, views.test) 0到9 4位
路由匹配的时候 会将括号内的正则表达式匹配到的内容 当做位置参数 传给 视图函数 这么说 的话 他的参数就不止request了
有名分组
url(r‘^test/(?P<year>\d+)/‘, views.test)
在括号内 ?p< > 就是 起别名
路由匹配的时候 会将括号内正则表达式匹配到的内容 当做关键字参数传递给视图函数
此时你的 位置参数就可以使用 他起的别名了
# 无名有名不能混合使用 !!! url(r‘^test/(\d+)/(?P<year>\d+)/‘, views.test),
但是用一种分组下 可以使用多个 # 无名分组支持多个 # url(r‘^test/(\d+)/(\d+)/‘, views.test), # 有名分组支持多个 # url(r‘^test/(?P<year>\d+)/(?P<xx>\d+)/‘, views.test), 这样的话 我们的关键字就有两个了
匹配主页
url(r‘^$‘,views.home)
反向解析
本质:本质其实就是 给你返回一个能够返回对应的 url的地址
1.我们需要给url 和 视图 函数起别名 例如
url(r‘^index/$‘,views.index,name=‘kkk‘)
2.反向解析
后端的反向解析
后端可以在任意位置 通过reverse 方向解析出 对应的url
from django.shortcuts import render,HttpResponse,redirect,reverse 小白必回三板斧 后加入 reverser reverse(‘kkk‘) shortcuts(快捷方式)
前端的反向解析
{% url ‘kkk‘ %}
应用场景 防止代码写死了 假如说你的html中的 a 标签 有1000个 指向 路由 /index/ 但是你的产品经理 突然说 你给老子 把 那个 url 的参数改了 那么这1000个a 标签就gg 了 我们 就可以先给 路由和视图函数起别名 标签 name=‘kkk‘
我们 前端页面中的a标签括号内使用 {%url ‘kkk‘%} 就可以反向解析到 你 url后缀了 就不怕你变了 同样 我们 还可以 在 后端 中使用 reverser(‘‘)内填写你起的别名 就可以反向解析到他的 url了
无名分组反向解析 url(r‘^index/(\d+)/$‘,views.index,name=‘kkk‘) 后端反向解析 reverse(‘kkk‘,args=(1,)) # 后面的数字通常都是数据的id值 前端反向解析 {% url ‘kkk‘ 1%} # 后面的数字通常都是数据的id值
有名分组反向解析 同无名分组反向解析意义的用法 url(r‘^index/(?P<year>\d+)/$‘,views.index,name=‘kkk‘) 后端方向解析 print(reverse(‘kkk‘,args=(1,))) # 推荐你使用上面这种 减少你的脑容量消耗 print(reverse(‘kkk‘,kwargs={‘year‘:1})) 前端反向解析 <a href="{% url ‘kkk‘ 1 %}">1</a> # 推荐你使用上面这种 减少你的脑容量消耗 <a href="{% url ‘kkk‘ year=1 %}">1</a> 注意:在同一个应用下 别名千万不能重复!!!
原文地址:https://www.cnblogs.com/lddragon/p/11537968.html