django基础操作简述
静态文件
static文件夹 --- 存一些css,js,img,第三方模块等,也可以再分文件夹
如:我们可以要引入本地的bootstrap的css和js文件,那么就可以放在static文件夹中,并且引入到html文件中进行使用,如图:
<link rel="stylesheet" href="static/bootstrap-5.1.3-dist/css/bootstrap.css">
<script src="static/bootstrap-5.1.3-dist/js/bootstrap.bundle.js"></script>
但是当我们访问网页,发现我们预设的bootstrap的样式并没有加载出来
检查一下网络请求,发现是因为bootstrap的css文件和js文件没能正常请求到:
默认情况下无法访问我们这些静态文件,因为没有开放资源连接。
静态文件资源开放
我们的html文件页面是通过url路由文件来配置路由和视图的对应关系,但是,对于繁杂的静态文件而言,使用urls去一个个的配置又过于麻烦,所以针对静态文件,django提供了一种配置接口:
# settings.py 中大概底端的位置
STATIC_URL = '/static/' # 访问静态文件资源的接口前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
] # 存储静态文件资源的目录
配置好后我们再次访问我们的网页,发现bootstrap文件就正常被导入了。
我们还可以让静态文件配置的动态加载,让访问的接口随配置的变化而变化。
在编写html文件时,可以先将一些配置导入,而静态文件的接口前缀则可以通过以下代码导入:
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
这些在html中插入{% %}
形式的占位符,可以配合python代码,在处理这些文字时,实现一些逻辑,这个在后续会有详细的说明。
而这段代码中,导入了静态接口的前缀,让我们的bootstrap文件的请求网址能够随访问的接口前缀变化而变化。
form表单
action:三种情况
-
""
没有写,则默认提交给当前页面所在的地址
-
"一个完整网址"
那就提交给这个指定的网址
-
"路由"
超当前服务端的对应路由提交
method:get\post请求方式
-
get请求是最常用的请求方式,是默认的请求方式
这种请求方式,有时会在路由后携带数据,格式为:
?键=值&键2=值2。。
-
post请求的数据在请求头中
这种请求方式,会隐藏的提交数据到后端,因为get请求提交的数据可以被看到不能满足所有的数据提交情况,如提交一些敏感数据时,可能被看到。
而post所携带的数据,和get所携带的数据在request对象的不同属性中。
request对象
request对象是在wsgiref模块的request字典基础上,又进一步的将其封装成了对象,不但处理了数据,还提供了一些功能。
以下就是针对请求体的一些方法。
属性 | 属性值|方法 | 说明 |
---|---|---|
.method | 获取请求方式 | GET或者POST的字符串 |
.POST | 拿到请求体中的数据 | 拿到的形式为一种query字典 |
.GET | 拿到请求首行中的数据 | 拿到的形式为一种query字典 |
QueryDict | 可以通过get(),getlist()拿值 | 可以理解为字典的派生类的对象 |
request.POST.get() # 获取列表的最后一个数据值
request.POST.getlist() # 获取整个列表数据
ps:在表单无法提交(403 forbidden)时,可以在配置中修改以下配置来解决:
Django连接数据库
- Django配置文件中默认配置的是sqlite3,用于本地测试,一般项目都不会用,实际项目中会替换掉。
# 默认配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
↓↓↓↓↓↓↓↓
# 修改配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'navicat_test1',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '111',
'CHARSET': 'utf8'
}
}
# 安装mysqlclient
配置文件改完后,看服务端的运行情况,报错了,并提示MySQLdb模块加载错误,是否下载mysqlclient。
我们下载后就恢复正常了,正常的启动我们的服务端。
我们知道数据库能存储的数据类型是有限的,我们如果想要存储我们的类和对象,怎么做呢?
或者说如何通过操作对象的方式去取我们数据库的方式(绕过sql语句)
ORM
将类和对象映射为数据库的数据:
- 类 --- 表
- 对象 --- 记录
- 对象的属性值 --- 记录某个字段的值
orm高度的封装了我们的sql语句,所以查询速度等级并不高,还是需要自己写sql。
orm操作
类相关
-
models.py中编写模型类
from django.db import models # Create your models here. class GirlsInfo(models.Model): # 字段名 = 字段类型 + 约束条件 id = models.AutoField(primary_key=True) # 主键类型 name = models.CharField(max_length=32) # 字符字段 age = models.IntegerField() # 整型字段
-
执行数据库迁移相关命令(每次修改和增加模型类都需要执行)
python38 manage.py makemigrations # 记录数据库相关 python38 manage.py migrate # 将操作同步到数据库 # 第一次会创建很多表、其中一个是当前新增的模型表
对象相关
-
对 对象记录 进行筛选增删改查
from app02 import models # 将模型类导入 models.类名.objects.create() # 根据字段塞关键字参数,就能插入记录 models.类名.objects.filter() # 筛选并默认查询 models.类名.objects.update() # 批量更新,一般搭配filter使用 models.类名.objects.delete() # 批量删除,一般搭配filter使用