☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层

图书管理系统的 表 设计

  图书管理系统分别有三张表 作者表 书籍表 出版社表  他们 的对应关系为

如何在 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

时间: 2024-08-01 07:05:42

☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层的相关文章

关于django一个请求的生命周期

作为一个python新手,django可能是作为python开发第一个接触的web框架了,今天来说说django的生命周期. 第一步:浏览器输入网址.接下来你以为就到django的urls了?No,紧接着是要经过django里的settings.py里的MIDDLEWARE配置,也就是中间件. 第二步:中间件通过之后才会到urls,通过urls的配置,找到views里的函数或类. 第三步:执行函数或类,返回一个字符串. 第四步:再通过一系列的中间件. 第五步:前端或模板语言获取到字符串,然后解析

java类生命周期详细解析

(一)详解java类的生命周期 引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也希望各路高手前来指正. 首先来了解一下jvm(java虚拟机)

Django中请求的生命周期 和 FBV模式和CBV模式

Django的生命周期就是你的 一个请求所发生的整个流程 Django的生命周期内到底发生了什么呢?? 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视图函数根据客

【Django】Django中请求的生命周期

Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视

drf框架 ----- 接口 cbv生命周期 请求\解析\响应组件 序列化组件 三大认证 其他组件

drf框架 全称: django-rest framework (framework:框架) 理论知识点 大纲 接口 接口: 联系连个物质的媒介, 完成信息交互 web程序中 : 联系前台页面与后台数据库的媒介 web 接口的组成 : url: 统一资源定位符 长得像返回数据的链接 请求参数: 前台按照指定的key 提供数据给后台 响应数据: 后台与数据库交互后将数据反馈给前台 restful接口规范 接口规范:就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据 如何写接口:接口规范

Django补充——中间件、请求的生命周期等

一:中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图. 与mange.py在同一目录下的文件夹 wupeiqi/middleware下的auth.py文件中的Authentication类 中间件中可以定义四个方法,分别是: pro

Vue ---- 组件文件分析 组件生命周期钩子 路由 跳转 传参

目录 Vue组件文件微微细剖 Vue组件生命周期钩子 Vue路由 1.touter下的index.js 2.路由重定向 3.路由传参数 补充:全局样式导入 路由跳转 1. router-view标签 2. router-link标签 3.逻辑跳转 this.$router 控制路由跳转 this.$route 控制路由数据 Vue组件文件微微细剖 组件在view 文件中创建 如果需要用到其他小组件可以 在 component文件中创建并导入 view文件下: <template> <di

WebApp中的页面生命周期及路由管理

最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在其中尽显无遗. 说说自己对Backbone优缺点的看法. Backbone确实是优秀的单页MVC框架,Events自定义事件机制,为Model/View/Colllection提供基础模块通信,Aync模块封装了CRUD的ajax操作,Router/History为开发者提供了路由机制,从很大程度上

(Android学习系列)二,窗口(Activity)的生命周期

在Activity从创建到销毁的过程中需要在不同的阶段调用7个生命周期的方法这7个生命周期方法定义如下: protected void onCreate(Bundle savedInstanceState) protected void onStart() protected void onResume() protected void onPause() protected void onStop() protected void onRestart() protected void onDe