1.orm表关系如何建立

1.主键

唯一字段,用于跟表中的数据形成对应关系,不能重复,不能为空

2.外键

一张表的外键是另一张表的主键,能确定另一张表记录的字段,用于保持数据的一致性,外键可以重复,

3.一对一

一种数据关系对应一种数据关系,比如:一个人只有一张身份证,一个身份证只能对应一个人

4.一对多

一种数据关系对应多种数据关系,比如:一本书只能被一个出版社出版,一个出版社可以出版多本书籍

5.多对多

多种数据关系对应多种数据关系,需要建立第三张表,比如:一个人可以写多本书,一本书也可以被多个人写

6.如何在django中创建主键外键

主键

可以自己创建,如果自己没有创建,系统会自动帮你创建

bid = models.AutoField(primary_key=True)

外键

一对多:

publish_id = models.ForeignKey(to='Publish')

注意事项:

1.to 用来指代跟那张表有关系,默认关联的就是表的主键字段

2.创建的外键一般写在使用多的一方,

一对一

author_detail = models.OneToOneField(to='Author_detail')

注意事项:

1.一对一外键字段,在创建的时候,同步到数据中,表字段会自动加_id后缀

2.建议写在使用多的一方

多对多:

author = models.ManyToManyField(to='Author')

注意事项:

1.django会自动帮你创建第三张表,

2.多对多的时候,无论在哪一张表中写都可以,但是建议在查询频率高的一方写

3.author这个字段是一个虚拟字段,不会在表中展示出来,起到的作用仅仅是告诉orm,我需要建立第三张表

注意:使用pymysql创建数据表之后,默认的格式是latin,这个时候是不支持中文输入的,需要进行编码转换,转换方式是如下:

alter table `tablename` convert to charset utf8;

2.django请求生命周期流程图

可以详细的看到django的运行过程

3.urls.py路由层

1.路由层的配置

将浏览器发送过来的url请求与后端中相对应的视图函数进行对应,来调用views中的视图函数进行逻辑处理

from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 登录
url(r'^test/',views.login)]

1.url中的第一个参数是一个正则表达式,只要这个正则表达式可以匹配到内容,就可以执行后边的视图函数

2.如果匹配到上边的有,但实际上应该匹配到的是下边的,这样就会出现匹配混乱的问题

2.正则表达式的一些基础使用

# ^     以.....开头
# $ 以.....结尾

4.路由匹配

路由匹配指的是在浏览器向服务端发送请求的时候,会将IP后面的url一起发送过来,与urls.py中的信息进行正则匹配,如果能匹配到信息,就调用views.py中的视图函数,进行处理。

APPEND_SLASH = True  # 该参数默认是True,加False自动取消浏览器加斜杠功能

5.无名分组

无名分组简单的说就是没有名字的分组,正则表达式加括号表示分组,浏览器给服务端发送请求,会将浏览器中/url/后边的信息也一起发送给,如果有,就需要使用一个位置参数来进行接收。

# urls.py中    url(r'^index/(\d+)/', views.index),  

# views:      def index(request,args)

6.有名分组

有名分组指的是使用正则匹配到的值是以关键字的行式传进视图函数中的,需要使用一个键值对来进行接收

# urls.py中    url(r'^index/(?P<year>\d+)/', views.index),  

# views:      def index(request,kwargs)

注意:有名分组与无名分组不能混合在一起使用,可以单独连续多个使用。

7.反向解析

反向解析是为了在使用路径的次数多的时候,如果更改了urls.py中的路径时,之前写的app中的路径会全部失效,为了防止这种情况发生,可以使用反向解析来进行处理,反向解析相当于动态的提供路径,不管urls.py中的路径如何变化,html,views.py中的路径会随着urls.py中路径的改变而改变。

1.如何使用

固定路径

# 在urls.py中,设置反向解析
url(r'^login/$', views.login,name='login_page'), # 路径login/的别名为login_page # 在views.py中,反向解析的使用:
url = reverse('login_page') # 在模版login.html文件中,反向解析的使用
{% url 'login_page' %}

无名分组

# 针对无名分组,比如我们要反向解析出:/aritcle/1/ 这种路径,写法如下
# 在urls.py中设置反向解析
url(r'^aritcle/(\d+)/$',views.article,name='article_page'), # 无名分组 # 在views.py中,反向解析的使用:
url = reverse('article_page',args=(1,)) # 在模版login.html文件中,反向解析的使用
{% url 'article_page' 1 %}

有名分组

# 针对有名分组,比如我们要反向解析出:/user/1/ 这种路径,写法如下
# 在urls.py中设置反向解析
url(r'^user/(?P<uid>\d+)/$',views.article,name='user_page'), # 在views.py中,反向解析的使用
url = reverse('user_page',kwargs={'uid':1}) # 在模版login.html文件中,反向解析的使用
{% url 'user_page' uid=1 %}

8.路由分发

路由分发是为了将多个app连接在一起整体使用,解决项目的总路由匹配关系过多的情况,但是存在的一个问题是如果有两个人的视图函数写的一样,这样在进行路径匹配的时候会出现匹配错误的情况,为了必满这种情况的发生,所以需要使用路由分发

1.使用方法

from django.conf.urls import url,include
from django.contrib import admin # 总路由表
urlpatterns = [
url(r'^admin/', admin.site.urls), # 新增两条路由,注意不能以$结尾
# include函数就是做分发操作的,当在浏览器输入http://127.0.0.1:8001/app01/index/时,会先进入到总路由表中进行匹配,正则表达式r'^app01/'会先匹配成功路径app01/,然后include功能会去app01下的urls.py中继续匹配剩余的路径部分
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
] python manage.py runserver 8001
# 在浏览器输入:http://127.0.0.1:8001/app01/index/ 会看到:我是app01的index页面...
# 在浏览器输入:http://127.0.0.1:8001/app02/index/ 会看到:我是app02的index页面...

inclued函数就是一个做分发操作的函数,当接收到路径的时候,会使用正则表达式在每个路由表中进行查找。

9.名称空间

因为name=‘ ’ 本身不会产生名称空间,所以在查找的时候会按照顺序来进行查找,当查找到的时候就不再向下查找了,这样会让查找的时候出现误差匹配,

解决方法:

# 1.不使用重名的别名

# 2.在每个app中直接这样定义
urlpatterns = [url(r'^reg/',views.reg,name='app02_reg')]
urlpatterns = [url(r'^reg/',views.reg,name='app01_reg')]

10.伪静态

将一个动态网页伪装成一个静态网页,以此来提高搜索引擎SEO查询频率和搜索力度

11.虚拟环境

什么是虚拟环境:一个新建的虚拟环境相当于一个新的python解释器

使用虚拟环境的目的:在写app的时候,会将python解释器中所有的库都进行加载,会造成资源浪费,使用虚拟环境,只下载自己需要的模块,在启动的时候就只会启动需要的模块。

注意点:过多的虚拟环境也会造成系统资源占用的浪费

12.django版本区别

django 1.x:urls.py中使用的是url,传入的第一个参数是正则,

django 2.x:urls.py中使用的是path,第一个参数不匹配正则,写什么匹配什么,匹配正则需要使用re_path

虽然path不支持正则,但是提供了五种转换器,能够将匹配到的数据自动转换成对应的类型,除此之外还支持自定义转换器。

form表单传文件需要注意的事项:

1.mothod必须改成post

2.enctype改成formdata格式

前期在使用post向后端发送请求的时候,需要去settings配置文件中注释掉一个中间件crf。

# 针对于文件的操作使用的是
file_obj = request.FILES # django会将文件数据放在request.FILES中
file_obj.name with open(file_obj.name,'wb') as f:
for line in file_obj:
f.write(line)

Django --- 路由层(urls)的更多相关文章

  1. 关于Django路由层简单笔记

    Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  2. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  3. Django路由层与视图层、pycharm虚拟环境

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  4. Django 路由层(urlconf)

    Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...

  5. Django路由层

    路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...

  6. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  7. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  8. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  9. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

随机推荐

  1. 转录组组装软件stringtie

    StringTie是約翰·霍普金斯大學计算机生物中心开发的一款转录组组装软件,在组装转录本的完整度,精度和速度方面都较以往的cufflinks 有很大的提升,也是目前有参考基因组转录组主流的组装软件. ...

  2. php扩展安装方式

    目录 扩展安装 php源码编译安装 PEAR.PECL phpize 源码安装 扩展安装 以php安装swoole扩展为例. php源码编译安装 下载源码包并编译安装 $ wget http://cn ...

  3. java中selenium判断某个元素是否存在

    selenium工具 直接通过findElement方法获取某个元素,如果该元素不存在肯定会报错,selenium又没有可以判断该元素是否存在的方法 于是我们可以手写一个工具类,来判断这个元素是否存在 ...

  4. Ubuntu的apt命令详解()deepin linux是在Ubuntu基础上开发的

    apt-cache和apt-get是apt包的管理工具,他们根据/etc/apt/sources.list里的软件源地址列表搜索目标软件.并通过维护本地软件包列表来安装和卸载软件. 查看本机是否安装软 ...

  5. WUSTOJ 1302: 区间k大数查询(Java)

    题目链接:

  6. Python中的单例模式的几种实现方式和优化以及pyc文件解释(转)

    原文:https://www.cnblogs.com/huchong/p/8244279.html 另一篇关于.pyc文件是什么?  原文: http://blog.sina.com.cn//s/bl ...

  7. # RESTful登录(基于token鉴权)的设计实例

    使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...

  8. 软键盘 显示隐藏 测量高度 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. webpack 3.1 升级webpack 4.0

    webpack 3.1 升级webpack 4.0 为了提升打包速度以及跟上主流技术步伐,前段时间把项目的webpack 升级到4.0版本以上 webpack 官网:https://webpack.j ...

  10. .net core微信群图片合并

    引用:SixLabors.ImageSharp,SixLabors.ImageSharp.Drawing,System.Drawing.Common /// <summary> /// 群 ...