Django项目中的响应请求以及数据库操作

    • 请求和响应

  • 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界面,添加删除按钮,实线删除用户

猜你喜欢

转载自blog.csdn.net/qyqyqyi/article/details/128832304