1、请求和响应
views 函数中的输入request对象封装了用户发送的所有请求相关数据。
获取请求方式(GET/POST)
request.method
获取通过url传递的参数
request.GET
request.POST
HttpResponse('str'),将字符串内容返回给请求者【响应】
return HttpResponse("str")
读取HTML的内容+渲染(替换内容)生成字符串返回给用户浏览器【响应】
return render(request,'html.html',{"para": "para"})
浏览器重定向到其他页面【响应】
from django.shortcuts import redirect
return redirect("url")
重定向采用第二种方式(返回url,请求者重新请求)
例子:使用请求和响应实现用户登录
path('login/',views.login)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post" action="/login/">
<!--action='/login'会引发django报错,可修改设置解决-->
{% csrf_token %}
<!--csfr_token是django安全机制,必须使用-->
<input type="text" name="user" placeholder="username">
<input type="password" name="pwd" placeholder="password">
<input type="submit" value="submit"/>
</form>
</body>
</html>
def login(request):
user={
"name": 'admin',
"password": '123456'
}
if request.method=='GET':
return render(request,'login.html')
if request.method=='POST':
submit=request.POST
if submit['user']==user['name']:
if submit['pwd']==user['password']:
return redirect("../user")
else:
return render(request,'login.html',{'error_msg': "password incorrect"})
else:
return render(request,'login.html',{'error_msg': f"user {submit['user']} not exist"})
2、数据库操作
python对数据库进行操作:pymysql库
django对数据库进行操作:ORM(避免直接的sql语句编写)
ORM功能:
- 创建、修改、删除数据表
- 操作数据表中数据
django连接数据库:settings.py
默认文件数据库sqlite,可修改为mysql
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'admis_web',
'USER': 'root',
'PASSWORD': '###',
'HOST': 'localhost',
'PORT': 3306,
}
django操作数据表:models.py
- 创建数据表
- 修改数据表
- 删除数据表
class User(models.Model):
name = models.CharField(max_length=32)
password=models.CharField(max_length=64)
role=models.CharField(max_length=32)
生成表结构
python manage.py makemigrations
python manage.py migrate
在models.py中修改后重新生成即可实现数据表的三类操作。
在对数据表添加属性时,存在原有数据在最新属性上没有值的情况。此时有三种方法解决:
- 更新表结构时手动输入值。
- 表设置默认值
role=models.CharField(max_length=32,default='user')
- 允许为空
role=models.CharField(max_length=32,null=True,blank=True)
django进行增删改查:
- insert:
User.objects.create(name='admin',password='123456',role='manager')
- delete
User.objects.filter(id=1).delete() #删除id=1数据 User.objects.all().delete() #删除表中所有数据
- select
data_list=User.objects.all() #获取表中所有数据 #type(data_list)=QuerySet[User object] #访问数据 for obj in data_list: print(obj.id,obj.name,obj.password,obj.role) data_list=User.objects.filter(id=1) #获取表中指定数据 data=User.objects.filter(id=1).first() #获取表中指定唯一数据 #type(data)=User object
- update
User.objects.all().update(password='88888888') User.objects.fliter(name='quin').update(role='fucking animal')