Django的小记
大致按流程列出来
在pycham中创建Django project时要确定机器上的版本及你要用的版本,机器上一般情况下默认最新版本2.1(2018年11月),根据需要下载相应版本
创建好工程后就要创建APP了,在terminal中用python manage.py startapp appname 创建APP,重点来了,要将你的APP名字添加到setting文件中INSTALLED_APPS下面
接着继续在setting中配置静态文件,在setting的最后一行即STATIC_URL = '/static/'之后,添加STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),),这一操作将名为static的静态文件做了配置,所以你的静态文件名要被命名为static
setting中还可以设置语言,在setting里默认会有LANGUAGE_CODE = 'en-us'默认是英语,这里的语言设置控制后台界面语言,我们可以改为中文LANGUAGE_CODE = 'zh-hans'。
接下来在urls中添加url时,有个点要注意,Django从1到2做出了一些改变,1中使用from django.conf.urls import url,用url(正则,函数)创建url,2推荐使用from django.urls import path,re_path ,要用正则匹配时使用re_path,例:re_path('page=(?P<page>\d+)&key=(?P<key>\w+)', views.detail, name="detail"),这里的name参数给你的url起个名字让能让你在其它地方明确引用它。
再多说点,由点及面稍微拓展下,我们的url正则会匹配到一些参数每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式。
在使用Django 项目时,一个常见的需求是获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。
人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。
换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。
获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。
Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:
- 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
- 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。
第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。
在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查,这里就会用到我们之前说到的url的name:
- 在模板中:使用url模板标签。
{%url'home'%},这里home就是我们起的别名 - 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
reverse("index", args=("2018", )),这里index就是我们起的别名 - 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。
在models.py中创建数据库表结构
from django.db import models # Create your models here. class UserInfo(models.Model):
"""
用户表
"""
nid = models.BigAutoField(primary_key=True)
username = models.CharField(verbose_name='用户名', max_length=32, unique=True)
password = models.CharField(verbose_name='密码', max_length=64)
nickname = models.CharField(verbose_name='昵称', max_length=32)
email = models.EmailField(verbose_name='邮箱', unique=True)
avatar = models.ImageField(verbose_name='头像')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) fans = models.ManyToManyField(
verbose_name='粉丝',
to='UserInfo',
through='Fans',
related_name='f',
through_fields=('user', 'follower'),
)
创建表时class要继承models.Model,models.BigAutoField创建自增字段,verbose_name设置后台显示的字段名,unique=True设置唯一,models.DateTimeField时间字段,auto_now_add=True记录创建时的时间,还有一个auto_now记录变动时间,只要有改动时间就变动。
表的关联涉及
- 一对多,models.ForeignKey(ColorDic)
- 一对一,models.OneToOneField(OneModel)
- 多对多,authors = models.ManyToManyField(Author)
1. 关联尚未定义的Model
class Book(models.Model):name = models.CharField(max_length = 50)#如果Publisher与Author在Book后面定义,需要使用model 的名称,而不是使用 model 对象本身pub = models.ForeignKey('Publisher')authors = models.ManyToManyField('Author')class Publisher(models.Model):name = models.CharField(max_length = 50)class Author(models.Model):name = models.CharField(max_length = 30)
2. Model关联自身
1) Model可以与自身做多对一关系
class People(models.Model):name = models.CharField(max_length = 30)leader = models.ForeignKey('self', blank=True, null=True)
说明:一个领导有多个下属,一个下属对应一个直接领导,同时领导也是领导的下属。就属于多对一关系,且需要与自身做多对一关系。且注意,设计这表时要设置blank=True和null=True.2) Model可以与自身做多对多关系
class Person(models.Model):friends = models.ManyToManyField('self')
用来定义一对一关系。笼统地讲,它与声明了 unique=True 的 ForeignKey 非常相似,不同的是使用反向关联的时候,得到的不是一个对象列表,而是一个单独的对象。
在某个 model 扩展自另一个 model 时,这个字段是非常有用的;例如: 多表继承 (Multi-tableinheritance) 就是通过在子 model 中添加一个指向父 model 的一对一关联而实现的。
必须给该字段一个参数:被关联的 model 类。工作方式和 ForeignKey 一样,连递归关联 (recursive) 和 延后关联 (lazy) 都一样。 此外,OneToOneField 接受 ForeignKey 可接受的参数,只有一个参数是 OnetoOneField 专有的:OneToOneField.parent_link,如果为 True,并且作用于继承自某个父 model 的子 model 上(这里不能是延后继承,父 model 必须真实存在 ),那么该字段就会变成指向父类实例的引用(或者叫链接),而不是象其他OneToOneField 那样用于扩展父类并继承父类属性。
on_delete参数的各个值的含义:
on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE, # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET, # 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
多对多(ManyToManyField)没有 on_delete 参数
表结构设计好后要生成migrations文件再到数据库中创建表
python manage.py makemigrations 命令将在当前app下的migrations里创建文件
接着python manage.py migrate 命令用migrations下的文件在数据库中创建表
继续啊
说一个取数据的操作,xxx = models.Student.objects.raw('select name from ooo_Student'),raw方法使得我们可以在Django中使用原生SQL语句做数据库操作,直接将原生sql语句加个引号' ' 写到raw()括号里
Django的小记的更多相关文章
- [Django] 单元测试小记
从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...
- Django细节小记
前记:Django的ORM.模块有很多函数细节,要学会多看文档学习函数的细节 聚合annotate()和aggregate()的使用 简言之,annotate()得到的是查询集,类似all(),只不过 ...
- Django学习小记1-安装配置
Django是一个开放源代码的Web应用框架,由Python写成. python 中的web框架有许多例如:Django.Tornado.Flask..而Django相较与其他WEB框架其优势为:大而 ...
- Django应用部署 - 上线指南
http://blog.csdn.net/pipisorry/article/details/46957613 python manage.py runserver已经很接近于服务器的形式,但是并不能 ...
- Python资源大全
The Python Tutorial (Python 2.7.11) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教程,本教程适用于 Python 2.7.X 系列 ...
- Github上的python开源项目
Python开源项目,期待大家和我们一起共同维护 github排名榜单 https://github.com/trending github搜索榜单:https://github.com/search ...
- django urls 配置小记
django urls 配置小记 首先应了解 django2.0在url的配置上较之以前的版本有点区别,在之前的版本是通过django.conf.urls.url函数来实现路径配置的 urlpatte ...
- Django 最好的缓存memcached的使用 小记
嗯,咳咳咳咳咳,这是在win平台上.linux平台上没折腾 首先你要在win上安装 Memcache 下载 :点我下载 里面有x64 和 x86 的.根据自己的系统版本来选择使用 使用命令行: 1 ...
- Django 1.9 admin 使用suit 小记
最近项目做到了后台管理的部分.Django虽然提供了后台管理,但是界面不咋好看.所以我使用了suit.官网http://djangosuit.com/ 步骤: 1,安装suit 项目settings. ...
随机推荐
- Three.js中的group,obj,模型中layers层级与相机
目录 Three.js中的group,obj,模型中layers层级与相机 layers group中的.layers.mask设置 一些设想 Three.js中的group,obj,模型中layer ...
- Pytest权威教程11-模块及测试文件中集成doctest测试
目录 模块及测试文件中集成doctest测试 编码 使用doctest选项 输出格式 pytest-specific 特性 返回: Pytest权威教程 模块及测试文件中集成doctest测试 编码 ...
- jquery 遍历对象、数组、集合
<div id="result" style="font-size:16px;color:red;"></div><table c ...
- 常用app分类
西瓜视频 今日头条(极速版) 喜马拉雅 扫描全能王 蜻蜓FM 每天影视 抖音 小读 樊登读书 微信读书 懒人听书 京东 找靓机 拼多多 淘宝 小米有品 当当 什么值得买 小米商城 淘票票 懂车帝 小红 ...
- 使用 concurrently 并行地运行多个命令(同时跑前端和后端的服务)
我现在有一个项目是这样的,前端是用 React 写的,后端是用 Nodejs,目录结构如下: . ├── README.md ├── backend ├── node_modules ├── pack ...
- #C++初学记录(字符串与指针操作库函数)
测试程序 #include<iostream> #include<cstring> using namespace std; int a[204],b[204],lena,n; ...
- Ubuntu 18.04.1 安装mysql 5.7.27
sudo apt-get update sudo apt-get install mysql-server 配置 sudo mysql_secure_installation 参考文档 Ubuntu1 ...
- 第10组 Alpha冲刺(2/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了如何根据系统获取的实际情况进行后端任务的调整 网易云音乐推荐算法的分析 ...
- 前端 MV*框架的意义
早期前端都是比较简单,基本以页面为工作单元,内容以浏览型为主,也偶尔有简单的表单操作,基本不太需要框架. 随着 AJAX 的出现,Web2.0的兴起,人们可以在页面上可以做比较复杂的事情了,然后前端框 ...
- 经管/管理/团队经典电子书pdf下载
卓有有效的管理者 管理的本质 只有偏执狂才能生存 格鲁夫给经理人的第一课 影响力: 你为什么会说“是” 关键影响力:如何调动团队力量 执行 如何完成任务的学问