django第二篇
1.静态文件配置
接口前缀:
STATIC_URL = '/static/'
跟静态文件夹的名字没有关系,默认情况下这个前缀跟静态文件夹名字一样
文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
'static':就是你的静态文件夹路径,可以设置多个,会依次查找列表中所有的静态文件路劲,找到就停止,都没有的话返回404(资源不存在)
2.form表单操作
form表单触发提交数据的动作两种方式:
<input type='submit'>
<button></button>
form表单提交数据地址的指定及方式:
action属性控制提交的地址
方式一:全路径
<form action='http://127.0.0.1:8000/login/'>
方式二:只写路劲后缀
<form action='/login/'>
方式三:不写(默认往当前路劲提交)
注意:利用a标签href属性可以指定页面跳转的路劲,href可以写全路劲,但是推荐写后缀即可
<a href='/login/' class='btn btn-success'>登入</a>
两种请求方式(form表单默认是get请求)
#根据客户端请求方式的不同执行不同的逻辑代码
def login(request):
#获取客户端的请求方式
print(request.method) #注意是全大写的字符串
if request.method == 'POST':
return HttpResponse('ok')
return render(request,'login.html')
获取请求方式中携带的参数
def login(request):
if request.method == 'POST':
print(request.POST) #里面存放了客户端post提交的所有数据,可以看成是一个大字典,{'username':['lucas'],'password':['123']}
print(request.POST.get('username')) #value虽然是一个列表,但是获取值得时候拿到的是单个元素,默认只会取列表里的最后一个元素
print(requet.POST.getlist('username')) #一次性获取value列表里的所有数据,应用场景可以是用户的爱好,多选框
#get请求的取值方式和post一样
3.django连接数据库
修改配置文件
DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'day54', #库名
'HOST':'127.0.0.1',
'POST':3306,
'USER':'root',
'PASSWORD':'123'
}
}
#注意:键必须是大写
替换
告诉Django用pymysql替换它,默认mysqldb模块连接数据库
方式一:在项目文件夹下面的__init__.py
方拾二:在应用文件夹下的__init__.py
#固定写法
import pymysql
pymysql.install_as_Mysql()
4.orm简单操作
orm简介
orm:对象关系映射,简单来说就是类对应数据库中的一张表,类对象对应表记录,对象的属性对应某条记录的值
django的orm不能自动创建库,但是可以自动创建表
小提示:一个django项目就使用一个库,不要多个django项目使用一个库
数据库迁移(同步)命令
在models创建好类之后,还需要两个命令:
python3(当前所用解释器名称) manage.py makemigrations:将数据库变动记录到文件中
python3 manage.py migrate:将数据库变动同步到数据库中
5.操作数据库
User表插入数据
方式一:
user_obj = models.User.objects.create(name=username,password=password)
#create方法有一个返回值,就是当前新增的数据对象本身
方式二:
user_obj = models.User(name=password,password=password)
user_obj.save()
查询数据
获取User表所有的数据
user_list = models.User.objects.all() #获取user表所有的数据
上图中的user_list是QuerySet对象,可以通过点query查看获取sql语句,QuerySet对象支持索引取值,但是不推荐,推荐使用自带的.first()来获取第一条数据
获取单个值
user_query = models.User.objects.filter(id=1) # queryset对象
user_obj = user_query.first() # 数据对象
# 当条件不存在的情况下会返回一个空的queryset对象,推荐使用
user_obj = models.User.objects.get(id=1) # 用get可以直接获取到数据对象本身,但是查询条件不存在的情况下直接报错,所有推荐使用filter
删除数据
models.User.objects.filter(id=1).delete() # 会将queryset所有的数据对象全部删除
修改数据
方式一:
models.User.objects.filter(id=edit_id).update(name=username,password=password)
#调用queryset封装的方法,该方法是一个批量操作,会将queryset内所有的数据对象全部修改
方式二:
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.password = password
user_obj.save()
上述edit_id获取方式:
方式一:利用input隐藏一个标签
<input type='hidden' name='edit_id' values='{{user_obj.pk}}'> #django中pk默认取的是主键字段,User表中id就是主键字段
方式二:GET请求携带
<form action='/edit/?edit_id={{user_obj.pk}}' method='post'>
</form>
上述修改、删除都是通过queryset对象点的方法完成的,会作用于内部所有的数据对象,类似于批量操作
注意:修改模型层里面的根表相关的所有的数据之后,必须重新执行数据库迁移命令