今日内容回顾(django入门之文件配置)
态文件配置
访问django框架资源的时候之所以可以拿到数据是应为提前在urls.py中开设了相应的资源接口,
如果访问不到资源那么就是没有开设相应的接口。
html页面上使用的不经常改变的资源,如css文件、js文件
针对静态文件资源一般都会放在static文件夹内,当static目录下出现了很多不同类型的静态文件资源,还可以分类管理。
如 others文件夹 存放第三方框架文件
css文件夹 存放所有的css文件
js文件夹 存放所有的JS文件
img文件夹 存放所有的img文件
针对静态文件资源的访问,再提前开设相应的接口。
STATIC_URL = '/static/'
# 静态文件资源配置,配置在配置文件settings.py内
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
# 接口前缀
STATIC_URL = "/static/"
# 动态解析,
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
请求方法
URL:统一资源定位符(网址)
-
GET请求
朝别人索要数据,也可以携带额外的数据,通过URL后面加上?后面填入需要携带的数据。
上述携带数据方式有限制,只能是一些不重要的非敏感数据,数据大小在2KB~4KB左右
GET请求没有请求体(HTTP数据格式)
-
POST请求
朝别人提交数据,也可以携带数据,数据都是放在请求体内,并且数据大小没有限制。
-
form表单默认的数据提交方式是GET请求
method = "post" 控制提交方式,不写默认get请求
action="" 控制数据的提交地址
action不写 默认朝当前页面所在的地址提交
写后缀自动补全ip和port。
-
提交post请求前期需要去配置文件中注释一行代码
MIDDLEWARE = [ # 'django.middleware.csrf.CsrfViewMiddleware', ]
request对象
request.method 获取请求方式,结果是纯大写的字符串
request.POST 获取post请求发送来的普通数据(不包含文件)
request.POST.get() 默认只获取列表中最后一个数据值
request.POST.getlist() 获取键对应的整个列表,无论有几个数据值
request.GET 获取url后面携带的非敏感数据
request.GET.get 默认只获取列表中最后一个数据值
request.GET.getlist 获取键对应的整个列表,无论有几个数据值
pycharm链接MySQL
-
查找pycharm提供的database按钮
在左下角或由侧边栏或者下载插件或卸载重装pycharm
-
首次链接数据库需要点击下方下载对应的驱动
-
输入自己的用户名,密码尝试链接即可
django链接MySQL
django默认使用的是sqlite3小型的数据库,这款数据库一般只用于本地测试功能较少。
修改指定数据库需要在配置文件中修改配置
# 在settings.py的配置文件中找到默认配置 如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 配置文件中修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
'NAME': 'day55', # 指定库名
'USER': 'root',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
"""
指定链接MySQL的模块
django1.11 版本需要在项目或者应用目录下的__init__.py中编写一行代码
import pymysql
pymysql.install_as_MySQLdb()
django2.2 以上版本需要使用mysqlclient模块
"""
django orm操作
"""
orm:对象关系的映射
类 >>> 表
对象 >>> 记录
对象点属性 >>>> 字段对应的值
"""
# 基本使用,先去应用目录下的models.py编写模型类
class User(models.model): # 在MySQL中类似于定义了表明
# id int primary key auto_increment
id = models.AutoField(primary_key=True) # 类似于定义了主键
# name varchar(32)
name = models.CharField(max_length=32) # 类似于定义了普通字段
# pwd int
pwd = models.IntegerField() # 类似于定义了普通字段
# 数据库迁移/同步命令
1. 将models中有关数据库操作记录下来(migrations文件夹)(添加操作记录)
在pyCharm中下方有个Terminal调出pyCharm中的快捷框框
输入命令:python38 manage.py makemigrations
2. 将操作真正影响到数据库(迁移到数据库)
命令行中输入:python38 manage.py migrate
"""当修改了models中与数据库相关的代码,都必须执行上述的命令
ps:可以简写 也可以指定应用单独迁移/同步
"""
3. 表的主键在orm中可以不写,orm会自动帮你添加一个id的主键
主键名字固定叫id
如果你需要主键的名字不加id,那么只能自己创建
orm语法
# 查询数据
modles.User.objects.filter() # 查询所有在表中的数据
filter("条件") # filte内部可以添加条件用于精准查询
如:
modles.User.objects.filter(id=1) # 只获取id = 1 的表中数据
类似: SQL语句中的>>>: select * form User where id = 1;
# 增加数据
models.User.objects.create()
# 修改数据
models.User.objects.filter(id=1).update(name='jasonZNB')
# 删除数据
models.User.objects.filter(id=4).dalete()
orm外键关联
MySQL
一对多:外键字段建在多的一方
多对多:外键字段建在第三张关系表中
一对一:外键字段建在查询频率较高的表中
ORM
# 一对多:外键字段建在多的一方
publish = models.Foreignkey(to="Publish",on_delete=models.CASCADE)
# 多对多:外键字段可以直接写在某张表中 orm会自动创建第三张表
aythors = models.ManyToManyField(to="Authors")
# 一对一:外键字段建在查询频率较高的表中
detail = models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)

浙公网安备 33010602011771号