Django-(2)
今日内容概览
- 静态文件及相关配置
- 请求方法
- request对象方法
- pycharm连接MySQL
- Django谅解MySQL
- Django orm
- orm语法
- orm外键关联
静态文件及相关配置
静态文件:html页面上使用的,不会进程改变的资源
- 第三方框架文件
- css文件
- js文件
- 图片文件
针对静态文件资源一般都放在static文件夹中,当static文件夹下出现了很多不同类型的文件资源,还可以分类管理:img文件夹、js文件夹、css文件夹、others文件夹
我们在访问django框架资源的时候之所以可以拿到数据是因为提前在urls.py中开设了相应的资源接口,如果访问不到资源,那么就是没有开设相应的接口
那么在浏览器想要看到好看的页面也需要访问css文件,但是css文件又没有添加到对应关系中,所以就只能看到html页面最原始的模样
所以针对静态文件资源的访问也需要提前开设相应的接口
在string.py中添加静态文件资源配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
接口前缀
STATIC_URL = '/static/'
想要访问静态文件只能使用这个前缀才能访问,否则会访问失败
如果想要更改接口前缀,那么所有使用了静态文件的html都需要修改前缀,太过麻烦;那么就可以使用动态解析
{% load static %}
<link rel='stylesheet' href='{% static "bootstrap-3.4.1-dist/css/bootstrap.min.css" %}'>
请求方法
1. GET请求
朝别人索要数据,也可以携带额外的数据
url?xxx=zzz&aaa=bbb
上述携带数据的方式有两个限制
1. 数据只能是非敏感数据
2. 数据大小不能太大
GET请求没有请求体
2. POST请求
朝别人提交数据
也可以携带额外的数据
数据放在请求体中,并且数据大小没有限制
3. form表单默认的数据提交方式是get
action='' 数据提交的地址,有三种写法
不写:朝当前页面所在的地址提交
写后缀:/login/,会自动补全ip与port
写全称:https://www.xxx.com/
method='post' 提交方式
4. 提交post请求可能会出错,需要去配置文件中注释一行代码
request对象方法
request.method 获取请求方式,结果是一个纯大写的字符串
# POST
request.POST 获取POST请求发来的普通数据
# <QueryDict: {'username': ['aaa', 'bbb', 'ccc'], 'password': ['123']}>
request.POST.get('username') 默认获取列表中最后一个数据值
# ccc
request.POST.getlist('username') 获取键对应的整个列表
# ['aaa', 'bbb', 'ccc']
request.GET 获取url后边携带的非敏感数据
# http://127.0.0.1:8000/login/?username=aaa
# <QueryDict: {'username': ['aaa']}>
request.GET.get('username') 默认获取列表中最后一个数据值
request.GET.getlist('username') 获取键对应的整个列表
pycharm连接MySQL
- 查找pycharm提供的database按钮
如果没有可能是没有下载插件,可以在设置里下载
或者卸载重装pycharm - 首次连接数据库需要下载对应的驱动
点击Download下载即可 - 简单的操作增删改查
Django连接MySQL
django默认使用的是sqlite3,但是这款数据库一般只用于本地测试,功能较少
1. 修改配置文件中的配置(键都用大写)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
'NAME': 'db1', # 指定库名
'USER': 'root',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'POST': 3306,
'CHARSET': 'utf8'
}
}
2. 指定连接MySQL的模块
django1.11版本需要在项目或者应用目录下的__init__.py中编写一行代码
import pymysql
pymysql.install_as_MySQLdb()
django2.2以上版本则需要使用mysqlclient模块
pip install mysqlclient
Django orm
orm:对象关系映射(Object Relational Mapping)
类 映射为 表
对象 映射为 记录
对象点属性 映射为 字段对应的值
"""orm的存在可以让不会MySQL的python程序员能够使用python的语法简单快捷的操作MySQL"""
1. 先去应用目录下的models.py编写模型类
class User(models.Model): 类似于定义表名
id = models.AutoField(primary_key=True) # 类似定义主键
# id int primary key auto_increment
name = models.CharField(max_lenght=32) # 类似定义了普通字段
# name varchar(32)
pwd = models.IntegerField() # 类似定义了整数
# pwd int
2. 数据库迁移(同步)命令
1. 将models中有关数据库的操作记录下来(migrations)
python manage.py makemigrations
2. 将真正的操作影响到数据库中
python manage.py migrate
"""
当修改了models中与数据库相关的代码时,都需要执行上述的命令
可以简写,也可以指定应用单独迁移(同步)
"""
3. 表的主键在orm中,可以不写,orm会自动添加一个id的主键
简写命令:
orm语法
1. 查
models.User.objects.filter() # <QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>]>
# 结果可以看成是一个列表套数据对象
# 可以使用索引获取对象,但是不推荐使用,可以使用first()方法,如果没有值会返回none
2. 增
models.User.objects.create(name='jerry', pwd=231)
3. 改
modeles.User.objects.filter(id=1).update(name='json')
# 修改需要选择修改目标,否则会修改全部
4. 删
models.User.objects.filter(name='jerry').delete()
# 删除数据不能够直接删除,要配合filter使用,想要全部删除数据filter内不填写条件即可
orm外键关联
一对多
外键字段建在多的一方
外键字段名 = models.ForeignKey(to='目标字段名', on_delete=models.CASCADE)
多对多
字段直接建在某张表中,orm会自动创建第三张表
外键字段名 = models.ManyToManyField(to='目标字段名')
一对一
字段建在查询评率高的表中
外键字段名 = models.OneToOneField(to='目标字段名', on_delete.CASCADE)
"""
外键字段orm会自动在末尾添加'_id'
想要自己选择外键关联字段,在括号内使用'to_field=xxx'修改
"""