Django的学习(一)--- M与V
1. 学习目标
(1)目录结构规范
(2)urls路由方式
(3)settings配置
(4)ORM操作
2. Django初识
Django是MVT模式,其实还是mvc模式:
M和以前一样是model
V是View与mvc中的C的功能一样
T是Templates,是模板的意思,与mvc中的V的功能一样
Django不足,没有service层,也可以人为去添加,但是初始状态就没有。
3. 工程目录结构
通过命令:
# 创建工程 django-admin startproject 工程名 # 在工程中(manage.py同级目录中)创建应用名(app) python manage.py start 应用名
如上图所示:
SafeHat为我的工程,下面有5个文件
(1) Safe_person 为创建的应用:
migrations为迁移文件,比如:写好model后可生成表时,操作数据库文件就是放在其中
__init__.py 表示当前目录为包,可在其中配置相关的参数
admin.py 是Django自带的admin相关配置,可与model相关
apps.py 是应用中的相关的配置参数,可自定义
models.py 是ORM,写指定的类,通过命令可以创建数据库结构
tests.py 单元测试
views.py 业务代码
(2)SafeHat 为工程文件目录:
__init__.py: 表示当前目录为包,可在其中配置相关的参数
settings.py 设置项目目录,数据库连接使用app参数
urls.py 配置页面路由
wsgi.py 处理响应
(3) templates 为T的模文件夹,可在文件夹里面建立相对的模板库文件夹
(4) db.sqlites3 自带的额sqlite数据库
(5)manage.py 项目入口函数,启动,创建app
4. urls路由方式
path('url路径',view.方法)
5. settings配置
(1) 应用注册:INSTALLED_APPS 加入 '文件名'
(2)配置数据库,如果数据库连接有问题,配置又正确,处理方案:pip install mysqlclient
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': '用户名', 'PASSWORD': '密码', 'HOST': 'ip', 'PORT': '端口', } }
(3)配置模板
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
(4) 配置语言
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/shanghai' USE_I18N = True USE_L10N = True USE_TZ = True
6. ORM操作
(1) 生成对应的类:
class BookInfo(models.Model): btitle = models.CharField(max_length=20, db_column='title') bpub_data = models.DateField() bread = models.IntegerField(default=0) bcomment = models.BooleanField(default=0) isDelete = models.BooleanField(default=False)
AutoField
自动增长的IntegerField,通常不用指定 不指定时Django会自动创建属性名为id的自动增长属性。
BooleanField
布尔字段,值为True或False。
NullBooleanField
支持Null、True、False三种值。
CharField
字符串 CharField (max_length=字符长度) max_length表示最大字符个数
TextField
大文本字段,一般超过4000个字符时使用。
IntegerField
整数
DecimalField
十进制浮点数 DecimalField (max_digits=None, decimal_places=None) max_digits表示总位数,decimal_places表示小数位数
FloatField
浮点数
DateField
日期 DateField [auto_now=False, auto_now_add=False]) auto_now每次保存对象时,自动设置该字段为当前时间 auto_now_add当对象第一次被创建时自动设置当前时间 auto_now_add和auto_now互斥,组合将会发生错误。
TimeField
时间,参数同DateField
DateTimeField
日期时间,参数同DateField
FileField
上传文件字段
ImageField
继承于FileField,对上传的内容进行校验,确保是有效的图片
(2)查询
# get 返回一个对象 BookInfo.objects.get(条件) # all返回queryset集合 BookInfo.objects.all() # 实现where :三种方案 # filter、exclude、get # 表中的属性名__比较运算符 BookInfo.objects.filter(id__exact='值') #实现like # contains 相当于 %值% # startwih 相当于 值% # endwith 相当于 %值 # 如果有%无需转义 BookInfo.objects.filter(btitle__contains = '值') # 查空 # 不为空结果 表类.objects.filter(属性__isnull = False) # 为空结果 表类.objects.filter(属性__isnull = True) # 范围查询 表类.objects.filter(属性__in = [值1, 值2......]) # 比较查询 # __gt大于 # __gte大于等于 # __It小于 # __Ite小于等于 # 查询日期 # 使用data()函数 # 使用 日期属性__year 或者 __month等