- 请求和响应
views.py
def something(request):
# request是一个对象,封装了用户发送过来的所有请求相关数据
# 获取请求方式
print(request.method)
# 在url上传递一些值 http://127.0.0.1:8000/something/?n1=123&n2=999
print(request.GET)
# 在请求体中提交数据
print(request.POST)
# 【响应】字符串内容返回给请求者
# return HttpResponse("返回内容")
# 【响应】读取html中的内容+渲染(替换)-> 字符串,返回给用户
# return render(request, "something.html")
# 【响应】让浏览器重定向到其他的页面
return redirect("https://www.baidu.com")
案例:登陆
view.py
def login(request):
if request.method == "GET":
return render(request, "login.html")
# 如果是POST请求,救护去用户提交的数据
print(request.POST)
username = request.POST.get("user")
password = request.POST.get("pwd")
if username == 'root' and password == '123':
# return HttpResponse("登陆成功")
return redirect("https://www.baidu.com")
# return HttpResponse("登陆失败")
return render(request, "login.html", {"error_msg": "用户名或密码错误"})
login.html:一定要在表单中加上{% csrf_token %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提 交">
<span style="color:red">{{ error_msg }}</span>
</form>
</body>
</html>
2.操作数据库
Django开发操作数据库可以更加简单,内部提供了ORM框架。
2.1安装第三方模块
conda install mysqlclient
2.2ORM
ORM可以帮助我们做两件事情:
创建、修改和删除数据库中的表。(不用写SQL语句)【无法创建数据库】
操作表中的数据。(不用写SQL语句)
1.自己创建数据库
mysql -u root -p
create database db1;
show database;
2.Django连接数据库
在setting.py文件中进行配置。注释原本的数据库配置。参考官方文档
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'USER': 'root',
'PASSWORD': '12345678',
"HOST": 'localhost',
'PORT': '3306',
}
}
3. Django操作表
创建表
model.py
from django.db import models
# Create your models here.
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
相当于在终端输入如下命令:
create table app01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
);
在终端执行命令(在manage.py文件所在目录下)
python manage.py makemigrations
python manage.py migrate
注意:app需要已经注册
在终端中执行
use db1;
mysql> show tables;
+----------------------------+
| Tables_in_db1 |
+----------------------------+
| app01_userinfo |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
11 rows in set (0.00 sec)
mysql> desc app01_userinfo;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| password | varchar(64) | NO | | NULL | |
| age | int | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
会发现自动创建了很多个表,并且创建了那个我们需要的app01_userinfo
修改或删除表
在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要制定新增列对应的数据:
1.手动输一个值
2.设置默认值或允许为空
age = models.IntegerField(default=2)
data = models.IntegerField(null=True, blank=True)
以后在开发中如果想要对表结构进行调整,只需要在models.py文件中进行操作即可。然后在终端输入命令
python manage.py makemigrations
python manage.py migrate
4.操作数据——增删改查
view.py
from app01 import models
def orm(request):
# 测试ORM操作表中的数据
# ### 1.新建 ###
# models.Department.objects.create(title='销售部')
# models.Department.objects.create(title='IT部')
# models.Department.objects.create(title='运营部')
# models.UserInfo.objects.create(name='qy', password='123', age=20)
# models.UserInfo.objects.create(name='qy1', password='123', age=21)
# ### 2.删除数据 ###
# models.UserInfo.objects.filter(id=2).delete()
# models.Department.objects.all().delete()
# ### 3.获取数据 ###
# 3.1获取符合条件的所有数据
# data_list伪QuerySet类型
# data_list = models.UserInfo.objects.all()
# for obj in data_list:
# print(obj.id, obj.name, obj.age)
# 3.2获取符合条件的第一条数据
# row_obj = models.UserInfo.objects.filter(id=1).first()
# print(row_obj.id, row_obj.name, row_obj.age)
# ### 4.更新数据 ###
# models.UserInfo.objects.update(password=999)
models.UserInfo.objects.field(id=1).update(passwoed=111)
return HttpResponse("创建成功")
案例:用户管理
1.展示用户列表/info/list
url.py
views.py
获取所有用户信息
HTML渲染
2.添加用户/info/add
url.py
view.py
GET,看见页面,输入内容
POST,提交内容,写入到数据库
3.删除用户/info/delete
url.py
view.py
在/info/list界面,添加删除按钮,实线删除用户