Django的入门和模型的总结
一,django 框架
—数据
---- 显示数据地方
1.,MVCM --- model---模型(玩数据)V --- View----视图(显示数据)C --- controller---控制器(模型和视图交互)M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。V全拼为View,用于封装结果,生成页面展示的html内容。C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
电脑: cpu 内存 硬盘高内聚
低耦合开源:源代码开源 22w行 google
闭源: 苹果系统
2,MVTM modelV viewT template
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
二,配置虚拟环境
- 支持第三方的东西
- 电商 支付
- 博客 不会有支付
电脑:
pip install pygame
pip install zhifu
pip install xxx
pip install xx
pip install xx
- 本地环境- 安装的东西越来越多- 硬盘- 虚拟环境电商 ---电商环境- 支付 python博客 ----博客环境---xxx python- mkvirtualenv -p python3 环境名字指定python版本mkvirtualenv 环境名字使的是你配置的python版本- rmvirtualenv 环境的名字 - deactivate 退出当前环境 - workon 切换环境
三,创建项目
1、创建项目
django-admin startproject xxxx
2、创建应用
python3 manage.py startapp xxx
3、启动服务
python3 manage.py runserver忽略大小写
如何关闭打开上个项目
#注册应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'player',
] - 如何创建数据表- M 不在需要写原生的SQL语句 通过面向对象的ORM class Dog: 就把应用名_类名(小写)当做数据表的名字name = xxxxage = xxxx 这些类属性就会当做字段名字O object 对象R relation 关系M mapping 映射‘就是对象翻译原生的sql去执行一个model对象 对应的就是一条数据
1,
#生成迁移文件
2,python3 manage.py makemigrations
#迁移
python3 manage.py migrate
sqlite#进入shell脚本测试环境python3 manage.py shell添加>>> from player.models import Hero>>> hero = Hero()>>> hero.name = "元歌">>> hero.gender=2>>> hero.desc = "很强 牛逼 好(。・∀・)ノ゙嗨呦">>> from datetime import datetime>>> hero.create_time= datetime.now()>>> hero.save()#相当于执行了insert语句或者update语句查询全部Hero.objects.all() 相当于执行select *查询当个 Hero.objects.filter(id=1) 返回列表Hero.objects.filter(id=1).first() 去列表第一个删除hero.delete()改也是执行save()方法V 视图:就是函数 函数里面有个参数叫request返回值是HttpResponseT:模板 在你的***项目 新建一个templates文件夹注意:在setting里面要配置一下BASE_DIR:就是项目路径'DIRS': [os.path.join(BASE_DIR, 'templates')],后台:管理数据给管理数据的人 创建一个账号python3 manage.py createsuperuser在settingsLANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'在admin.py# 注册admin.site.register(Hero)在model里面写一个def __str__(self):return self.name
1、创建项目、创建应用
2、把应用添加到setting
3、创建模型
4、生成迁移文件并迁移
5、写视图函数
6、配置urls
7、在视图函数查询数据
8、创建项目目录下模板文件夹并创建模板
9、把模板路径配置setting
10、在视图函数直接return render(request,模板,数据)
11、在模板解析数
http://127.0.0.1:8000
四,后台管理
1,中文
打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
LANGUAGE_CODE = 'zh-hans' #使用中国语言
TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
2, 创建管理员
python manage.py createsuperuser
3,启动服务器
python manage.py runserver
4,打开浏览器输入地址
http://127.0.0.1:8000/admin/
create_time:创建的时间
update_time:更新时间
isshow 是否显示 False True
isdelete 是否删除 False
position 索引字段
注意:不要轻易删除用户一些数据
有些数据不要轻易物理删除,
支付宝: 支付500元 把记录删除
支付年度统计:
标签和文章
一个标签能不能有多个文章
一个文章能不能有多个标签
王者荣耀 更新了。。。。。。
王者 游戏
明日之后 上架了。。。。
游戏 腾讯
一张文章表:
id name category_id
1 哈哈 1
2 呵呵 1
分类表category
id name
Model字段设计全一些 不要轻易改变
最难的点:
1、设计model
2、看看印象笔记查询的
在模板当中 href加斜杠和不加斜杠的区别
http://127.0.0.1:8000/app04/
http://127.0.0.1:8000/user/1/ 加/
http://127.0.0.1:8000/app04/user/1/ 不加/
如果你的models里面有choice这样的选择
前端显示的通过 对象.get_字段_display
查询两大特性:
惰性查询:
缓存:
#两种查询单个方式
def detail(request,id):
#查询一个人 第一种方法
person = Person.objects.filter(id=id).first()
#如果你用这种方法查询的话 ,如果数据不存在 会抛出异常。如果想让你的程序不能奔溃
#需要加一个异常捕获
try:person = Person.objects.get(id=id)
except Person.DoesNotExist as e:print(e)
return render(request, 'app05/jianli.html', locals())
限制查询集
Person.objects.all()[0:5]
#自关联
省
id name
1 河南省
2 河北省
市
id name parent_id
1 郑州市 1
2 石家庄 1
区
id name parent_id
1 金水区 1
2 xxx 2
解决;
省
id name parent_id
1 河南省 null
2 河北省 null
3 郑州市 1
4 石家庄 2
5 金水区 3
6 xxx 4
#查询省
selet * from area where id = null
查询郑州市下的区
selet * from area where id = 3
查询河南省下的市
selet * from area where id = 1
#模型的默认管理器
objects
如果你在模型类当中写了一个objects1 = models.Manager()
那这个模型类的默认管理器就是失效了
all()只查询年龄为13的人
当原生管理器 满足不了您的需求的时候,就需要重写管理器
重回管理器两个作用:
1、重写查询方法
2、自定义方法
1、MVC
2、MVT
3、ORM
4、虚拟环境
5、创建项目和应用
6、django 一般配置
总结:
1、模型字段和字段约束
2、模型关联和自关联
3、模型查询和反向查找
4、自定义管理器
5、元选项
6、choice和get_xxx_display()
verbose_name = ‘用户’
#复数
verbose_name_plural = verbose_name
#排序
ordering = [’-id’]
db_table = ‘user’
#视图:
1、pycharm 创建项目
2、配置mysql
3、位置参数和关键字参数
晚上作业:
1、用自己独立的话整理出今天所有知识点。越全越好。越
详细越好不许抄的。写博客
2、pycharm大小写配置
3、mysql能正常起来
HTTP:
超文本传输协议、无状态 基于Socket的TCP
请求方法:
Get 请求 获取
域名
Post 请求 新增
参数在Body体
PUT 更新
DELETE 删除
状态码:
2xx—请求成功
3xx----重定向
4xx----客户端错误
5xx — 服务器错误
请求头:
响应头:
如果form表达action不填的话:默认添加当前地址
注册登录案例:
1、Model:账号,昵称、密码 、性别、描述
2、注册功能,注册成功后跳到登录页
3、登录功能,登录成功显示这个人具体信息
1、登录状态如何保持
2、如何实现推荐商品
Cookie:
存在浏览器当中,
并且是基于域名安全的。
cookie会自动传给服务器
cookie默认的过期是关闭浏览器就过期
max_age :指定多少秒过期
expires:具体过期日期 datetime.datetime(2019,2,26)
第一次:搜索橙子 两个字放到cookie
第二次:再次网站,就把cookie自动传给后台
Session:
存在服务器当中、存一些敏感信息、数据库有个session表
它的键其实就是存在cookie里面的sessionid
它的值采用base64加密 可以解密
Session依赖于cookie。在cookie里面会有session_id
账户有800元:
验证码
清除验证码:
清除所有session,在存储中删除值部分
request.session.clear()
清除session数据,在存储中删除session的整条数据。
request.session.flush()
删除session中的指定键及值,在存储中只删除某个键及对应的值。
del request.session[‘键’]
request.session.set_expiry(value)
- 如果value是一个整数,会话将在value秒没有活动后过期。
- 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
- 如果value为None,那么会话永不过期。
ORM概念
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM的劣势
ORM的缺点是会在一定程度上牺牲程序的执行效率。
ORM用多了SQL语句就不会写了,关系数据库相关技能退化…
ORM的优势
ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
字段类型
使用时需要引入django.db.models包,字段类型如下:
*
AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。(必须填入参数primary_key=True)
* BooleanField:布尔字段,值为True或False。
*
NullBooleanField:支持Null、True、False三种值。
*
CharField(max_length=字符长度):字符串。
*
参数max_length表示最大字符个数。
*
TextField:大文本字段,一般超过4000个字符时使用。
*
IntegerField:整数。
*
DecimalField(max_digits=None, decimal_places=None):十进制浮点数。
*
参数max_digits表示总位数。
*
参数decimal_places表示小数位数。
*
FloatField:浮点数。
*
DateField[auto_now=False, auto_now_add=False]):日期。
*
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
*
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
*
参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
*
TimeField:时间,参数同DateField。
*
DateTimeField:日期时间,参数同DateField。
*
FileField:上传文件字段。
from django.db import modelsclass UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32)class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
Django的入门和模型的总结
一,django 框架
—数据
---- 显示数据地方
1.,MVCM --- model---模型(玩数据)V --- View----视图(显示数据)C --- controller---控制器(模型和视图交互)M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。V全拼为View,用于封装结果,生成页面展示的html内容。C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
电脑: cpu 内存 硬盘高内聚
低耦合开源:源代码开源 22w行 google
闭源: 苹果系统
2,MVTM modelV viewT template
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
二,配置虚拟环境
- 支持第三方的东西
- 电商 支付
- 博客 不会有支付
电脑:
pip install pygame
pip install zhifu
pip install xxx
pip install xx
pip install xx
- 本地环境- 安装的东西越来越多- 硬盘- 虚拟环境电商 ---电商环境- 支付 python博客 ----博客环境---xxx python- mkvirtualenv -p python3 环境名字指定python版本mkvirtualenv 环境名字使的是你配置的python版本- rmvirtualenv 环境的名字 - deactivate 退出当前环境 - workon 切换环境
三,创建项目
1、创建项目
django-admin startproject xxxx
2、创建应用
python3 manage.py startapp xxx
3、启动服务
python3 manage.py runserver忽略大小写
如何关闭打开上个项目
#注册应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'player',
] - 如何创建数据表- M 不在需要写原生的SQL语句 通过面向对象的ORM class Dog: 就把应用名_类名(小写)当做数据表的名字name = xxxxage = xxxx 这些类属性就会当做字段名字O object 对象R relation 关系M mapping 映射‘就是对象翻译原生的sql去执行一个model对象 对应的就是一条数据
1,
#生成迁移文件
2,python3 manage.py makemigrations
#迁移
python3 manage.py migrate
sqlite#进入shell脚本测试环境python3 manage.py shell添加>>> from player.models import Hero>>> hero = Hero()>>> hero.name = "元歌">>> hero.gender=2>>> hero.desc = "很强 牛逼 好(。・∀・)ノ゙嗨呦">>> from datetime import datetime>>> hero.create_time= datetime.now()>>> hero.save()#相当于执行了insert语句或者update语句查询全部Hero.objects.all() 相当于执行select *查询当个 Hero.objects.filter(id=1) 返回列表Hero.objects.filter(id=1).first() 去列表第一个删除hero.delete()改也是执行save()方法V 视图:就是函数 函数里面有个参数叫request返回值是HttpResponseT:模板 在你的***项目 新建一个templates文件夹注意:在setting里面要配置一下BASE_DIR:就是项目路径'DIRS': [os.path.join(BASE_DIR, 'templates')],后台:管理数据给管理数据的人 创建一个账号python3 manage.py createsuperuser在settingsLANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'在admin.py# 注册admin.site.register(Hero)在model里面写一个def __str__(self):return self.name
1、创建项目、创建应用
2、把应用添加到setting
3、创建模型
4、生成迁移文件并迁移
5、写视图函数
6、配置urls
7、在视图函数查询数据
8、创建项目目录下模板文件夹并创建模板
9、把模板路径配置setting
10、在视图函数直接return render(request,模板,数据)
11、在模板解析数
http://127.0.0.1:8000
四,后台管理
1,中文
打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
LANGUAGE_CODE = 'zh-hans' #使用中国语言
TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
2, 创建管理员
python manage.py createsuperuser
3,启动服务器
python manage.py runserver
4,打开浏览器输入地址
http://127.0.0.1:8000/admin/
create_time:创建的时间
update_time:更新时间
isshow 是否显示 False True
isdelete 是否删除 False
position 索引字段
注意:不要轻易删除用户一些数据
有些数据不要轻易物理删除,
支付宝: 支付500元 把记录删除
支付年度统计:
标签和文章
一个标签能不能有多个文章
一个文章能不能有多个标签
王者荣耀 更新了。。。。。。
王者 游戏
明日之后 上架了。。。。
游戏 腾讯
一张文章表:
id name category_id
1 哈哈 1
2 呵呵 1
分类表category
id name
Model字段设计全一些 不要轻易改变
最难的点:
1、设计model
2、看看印象笔记查询的
在模板当中 href加斜杠和不加斜杠的区别
http://127.0.0.1:8000/app04/
http://127.0.0.1:8000/user/1/ 加/
http://127.0.0.1:8000/app04/user/1/ 不加/
如果你的models里面有choice这样的选择
前端显示的通过 对象.get_字段_display
查询两大特性:
惰性查询:
缓存:
#两种查询单个方式
def detail(request,id):
#查询一个人 第一种方法
person = Person.objects.filter(id=id).first()
#如果你用这种方法查询的话 ,如果数据不存在 会抛出异常。如果想让你的程序不能奔溃
#需要加一个异常捕获
try:person = Person.objects.get(id=id)
except Person.DoesNotExist as e:print(e)
return render(request, 'app05/jianli.html', locals())
限制查询集
Person.objects.all()[0:5]
#自关联
省
id name
1 河南省
2 河北省
市
id name parent_id
1 郑州市 1
2 石家庄 1
区
id name parent_id
1 金水区 1
2 xxx 2
解决;
省
id name parent_id
1 河南省 null
2 河北省 null
3 郑州市 1
4 石家庄 2
5 金水区 3
6 xxx 4
#查询省
selet * from area where id = null
查询郑州市下的区
selet * from area where id = 3
查询河南省下的市
selet * from area where id = 1
#模型的默认管理器
objects
如果你在模型类当中写了一个objects1 = models.Manager()
那这个模型类的默认管理器就是失效了
all()只查询年龄为13的人
当原生管理器 满足不了您的需求的时候,就需要重写管理器
重回管理器两个作用:
1、重写查询方法
2、自定义方法
1、MVC
2、MVT
3、ORM
4、虚拟环境
5、创建项目和应用
6、django 一般配置
总结:
1、模型字段和字段约束
2、模型关联和自关联
3、模型查询和反向查找
4、自定义管理器
5、元选项
6、choice和get_xxx_display()
verbose_name = ‘用户’
#复数
verbose_name_plural = verbose_name
#排序
ordering = [’-id’]
db_table = ‘user’
#视图:
1、pycharm 创建项目
2、配置mysql
3、位置参数和关键字参数
晚上作业:
1、用自己独立的话整理出今天所有知识点。越全越好。越
详细越好不许抄的。写博客
2、pycharm大小写配置
3、mysql能正常起来
HTTP:
超文本传输协议、无状态 基于Socket的TCP
请求方法:
Get 请求 获取
域名
Post 请求 新增
参数在Body体
PUT 更新
DELETE 删除
状态码:
2xx—请求成功
3xx----重定向
4xx----客户端错误
5xx — 服务器错误
请求头:
响应头:
如果form表达action不填的话:默认添加当前地址
注册登录案例:
1、Model:账号,昵称、密码 、性别、描述
2、注册功能,注册成功后跳到登录页
3、登录功能,登录成功显示这个人具体信息
1、登录状态如何保持
2、如何实现推荐商品
Cookie:
存在浏览器当中,
并且是基于域名安全的。
cookie会自动传给服务器
cookie默认的过期是关闭浏览器就过期
max_age :指定多少秒过期
expires:具体过期日期 datetime.datetime(2019,2,26)
第一次:搜索橙子 两个字放到cookie
第二次:再次网站,就把cookie自动传给后台
Session:
存在服务器当中、存一些敏感信息、数据库有个session表
它的键其实就是存在cookie里面的sessionid
它的值采用base64加密 可以解密
Session依赖于cookie。在cookie里面会有session_id
账户有800元:
验证码
清除验证码:
清除所有session,在存储中删除值部分
request.session.clear()
清除session数据,在存储中删除session的整条数据。
request.session.flush()
删除session中的指定键及值,在存储中只删除某个键及对应的值。
del request.session[‘键’]
request.session.set_expiry(value)
- 如果value是一个整数,会话将在value秒没有活动后过期。
- 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
- 如果value为None,那么会话永不过期。
ORM概念
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM的劣势
ORM的缺点是会在一定程度上牺牲程序的执行效率。
ORM用多了SQL语句就不会写了,关系数据库相关技能退化…
ORM的优势
ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
字段类型
使用时需要引入django.db.models包,字段类型如下:
*
AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。(必须填入参数primary_key=True)
* BooleanField:布尔字段,值为True或False。
*
NullBooleanField:支持Null、True、False三种值。
*
CharField(max_length=字符长度):字符串。
*
参数max_length表示最大字符个数。
*
TextField:大文本字段,一般超过4000个字符时使用。
*
IntegerField:整数。
*
DecimalField(max_digits=None, decimal_places=None):十进制浮点数。
*
参数max_digits表示总位数。
*
参数decimal_places表示小数位数。
*
FloatField:浮点数。
*
DateField[auto_now=False, auto_now_add=False]):日期。
*
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
*
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
*
参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
*
TimeField:时间,参数同DateField。
*
DateTimeField:日期时间,参数同DateField。
*
FileField:上传文件字段。
from django.db import modelsclass UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32)class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)