fomr表单请求与Django连接数据库及ORM
form表单提交数据
form表单触发提交数据的动作两种方式
<input type='submit'>
<button>...</button>
form表单提交数据的地址如何指定及方式
action属性控制提交的地址
方式:
-
全路径
<form action='http://127.0.0.1:8080/login/'> -
只写路径后缀
<form action="/login/"> -
不写(默认往当前路劲提交)
form表单默认是get请求
# 根据客户端请求方式的不同执行不同的逻辑代码
def login(request):
# 获取用户端提交的请求方式
print(request.method) # 拿到的请求方式是全大写的字符串
if request.methon == 'GET':
return render(request,'login.html')
elif request.methon == "POST":
return HtthoResponse("收到了,老弟")
# 个人建议按照下面这种方式书写,减少代码冗余及结构混乱的问题
def login(request):
if request.method == 'POST':
return HttpResponse("OK")
return render(requet,'login.html')
def login(request):
if request.method == 'POST':
print(request.POST) # 可以看成一个大字典里面存放了客户端post请求的所有的数据
# request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >
print(request.POST.get("username")) # value虽然是个列表但是获取value的时候拿到的是单个元素
# 默认只会取value列表里面的最后一个元素
# request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>
print(request.POST.getlist('username')) # 要想一次性获取value列表里面所有的是数据需要用getlist()
# ['jason', 'egon']
print(request.POST['password']) # 不推荐使用该方法获取数据
return HttpResponse("OK")
return render(request,'login.html')
# 获取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'
}
}
# 'NAME':要连接的数据库,连接前需要创建好
# 'USER':连接数据库的用户名
# 'PASSWORD':连接数据库的密码
# 'HOST':连接主机,默认本机
# 'PORT':端口 默认3306
# PS: 键必须都是大写
# NAME即数据库的名字,在mysql连接前该数据库必须已经创建
2. 告诉django用pymysql替换它默认mysqldb模块连接数据库
# 方式1:在你的项目文件夹下面的__init__.py
# 方式2:也可以在你的应用文件夹下面的__init__.py
# 固定写法
import pymysql
pymsql.install_as_MySQLdb() # 告诉django用pymysql代替mysqldb连接数据库
Django之ORM
什么是orm
对象关系映射
类 >>> 表
对象 >>> 表记录
对象的属性 >>> 一条记录某个字段对应的值
Django ORM 创建表
django的ORM不能自动帮你创建库,但是可以自动帮你创建表
提示:一个django项目就使用一个库,不要多个django项目使用一个库
# 数据库迁移(同步)命令
python3 manage.py makemigrations # 将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migarte # 将你的数据库变动同步到数据库中
ORM新增数据
操作数据库user表插入数据
方式一:
user_obj = models.User.object.create(name=username,password=password)
方式二
user_obj = models.User(name=username,password=password)
user_obj.save() # 对象调用sava方法保存到数据库
ORM查询数据
user_list = models.User.objects.all() # 获取user表所有的数据
user_list = models.User.objects.filter(id=1) # 获取user表特定的数据
# 只要是QuerySet对象就可以点query查看获取到当前QuerySet对象的内部sql语句
QuerySet对象支持索引取值,但是不推荐使用,推荐使用自带的.first()帮你获取第一条数据
查询数据需要注意的是你获取到的到底是一个queryset对象还是一个数据对象
user_query = models.User.objects.filter(id=edit_id).first() # 如果你是要获取数据对象first千万别忘了
# first当条件不存在的情况下返回一个空的queryset对象
# <QuerySet []> <class 'django.db.models.query.QuerySet'>
user_obj = models.User.objects.get(id=edit_id) # 用get可以直接获取到数据对象本身但是查询条件不存在的情况下直接报错
ORM删除数据
models.User.objects.filter(id=1).delete() # 会将queryset所有的数据对象全部删除
ORM编辑数据
编辑对象的id的获取方式
方式一:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式二:利用action重定向用get方式传给后端
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post">
编辑对象
注意:queryset对象点修改 删除 会作用于对象内部所有的数据对象 类似于批量操作
方式一:
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式二:获取到当前的数据对象
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.save()
ORM修改模型表
修改模型层里面的跟表相关的所有的数据,只要你修改了就必须重新执行数据库迁移命令
python3 manage.py makemigrations # 记录到小本上
python3 manage.py migrate # 真正操作数据库
a标签重定向
利用a标签href属性 可以指定页面跳转的路径 href可以写全路径 但是推荐写后缀即可
<a href="/reg/" class="btn btn-success">添加数据</a>
<!--注意 路径的书写一定要加斜杠-->

浙公网安备 33010602011771号