静态文件配置
STATIC_URL='/static/' #接口前缀 和静态文件夹的没有一点关系(只是默认情况下这个前缀和静态文件夹名字一样!!)
STATICFILE_DIRS=[
os.path.join(BASE_DIR,'static') #就是你的静态文件路径
os.path.join(BASE_DIR,'static1')#不同app下的static文件路径
]
查找的时候会查找流标中所有的静态文件路径,找到的话立刻停止,都没有找到返回404
<input type='submit'>
<button></button>
action属性提交的地址
方式一:
1.全路径
2.只写路径后缀
3.不写,默认往当前路径提交,form表单默认是get请求
根据客户端请求方式的不同执行不同的代码
def login(request):
print(request.method) #获取用户提交的请求方式,全是大写的字符串
if request.method == 'GET':
return render(request,'login.html') #get的话返回登录页面
return HttpResponse('ok') #如果是post的话进行其他操作
def login(request):
print(request.method) #获取用户提交的请求方式,全是大写的字符串
if request.method == 'GET':
return render(request,'login.html') #get的话返回登录页面
print(request.POST) #类似于大字典中存放了提交的所有数据
# request.POST:< QueryDict: {'username': ['jason','egon'], 'password': ['123']} >
print(request.POST.get('username')) #value虽然是个列表但是获取value的时候拿到是单个元素(默认取value列表里的最后一个元素)
#egon
print(request.POST.getlist('username')) #想要一次性获取value列表里面所有的数据要用getlist()
#['jason','egon']
print(request.POST['password']) #不推荐使用该方法,因为没有就会报错
return HttpResponse('ok')
获取value列表里面所有的元素需要使用getlist 应用场景:多选框
get只会获取到value列表中最后一个元素
Django连接数据库
1.需要在配置文件
DATABASES = {
'default':{
'ENGINE' : 'django.db.backends.mysql',
'NAME' :'day54',
'HOST':'127.0.0.1'
'PORT':3306,
'USER':'root'
'PASSWORD':'123'
}
}
PS:键必须大写
2.告诉django要用pymysql替换他默认mysqldb模块连接数据库
方式一:在项目文件下面的__init__.py
方式二:在应用文件夹下面的__init__.py
#固定写法
import pymysql
pymysql.install_as_MYSQLdb() #告诉django用pymysql代替mysqldb连接数据库
ORM(object relational mapping)
django的orm不能够创建库,但是可以自动创建表!!!!!!!!!
提示:一个django项目尽量使用一个库,不要多个项目使用一个库
数据库迁移
python3 manage.py makemigrations 将数据库变动记录到一个小本本上(不会在数据库中生成表,但是会生成一个py文件来存放记录)
python3 manage.py migrate 将数据库变动同步在数据库中
页面跳转
利用a标签href属性可以指定页面跳转的路径,href可以写全路径 但是推荐写后缀即可
注意:路径的书写一定要加斜杠!!
重定向 可以写别人的网址也可以是自己的路径
return redirect('/userlist')
return redirect('/userlist/')
Django数据库的操作
增
方式一:
user_obj = models.User.objects.create(name=username,password=password)
方式二:
user_obj = models.User(name=username,password=password)
user_obj.save()#调用save方法保存到数据库
删
models.User.objects.filter(id=1).delete()#会将queryset所有的数据对象全部删除
改
编辑对象的id获取方式
方式一:<input type='hidden' name='edit_id' value={{user_obj.pk}}>
利用hidden隐藏的功能,暗度陈仓
方式二:<form action="/edit/?edic_id={{user_obj.pk}}" method='post'>
以GET的形式在后缀添加数据,传输的形式还是post这并不冲突
注意:queryset对象修改 删除会作用于对象所有的数据对象。类似于批量操作
修改方式
方式一:
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式二:
user_obj=model.User.object.filter(id=edit_id).first()
user_obj.name=name
user_obj.password=password
user_obj.save()
查
查询数据需要注意获取到的是queryset对象还是一个数据对象
user_list=models.User.objects.all()#获取user表所有的数据,得到的是一个QuerySet对象,如果是该类对象可以调用query获取内部的sql语句
print(user_list.query)
user_obj=model.User.object.filter(id=1).first()
得到第一个数据对象,model.User.object.filter(id=1)得到的是id=1筛选后的queryset对象.first()就是可以得到第一条数据。
ps:queryset也支持索引取回,但是推荐使用自带的first获取第一条
ps2:filter当筛选条件不存在的情况下会返回一个空的queryset对象
user_Obj = models.User.objects.get(id=edit_id) #用get可以直接获取到数据对象本身但是查询条件不存在的时候直接报错