Django的请求与响应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def login(request):
# 请求
# 获取请求方式
print(request.method)
# 获取url中传递的参数 /login/?n1=123&n2=345
print(request.GET)

# 获取请求体中传递的数据
print(request.POST)

# 响应
# return HttpResponse("返回内容")
return redirect("https://baidu.com") # 重定向

Django和数据库

Django 在内部集成了一个orm框架,orm会翻译我们的代码并进行数据库操作

MySQL

安装依赖

安装 mysqlclient

1
pip install mysqlclient==2.1.1

连接数据库

只能创建表,但是不能创建数据库

  1. 首先手动创建一个数据库

    1
    create database djstudy DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  2. django 连接数据库
    在settings.py中配置连接数据库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # Database
    # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
    # 默认用的是一个sqlite文件数据库,我们可以配置我们自己的
    # DATABASES = {
    # "default": {
    # "ENGINE": "django.db.backends.sqlite3",
    # "NAME": BASE_DIR / "db.sqlite3",
    # }
    # }

    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'djstudy',
    'USER': 'root',
    'PASSWORD': '123zxc',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    }
    }

创建表

在 models.py 文件中,编写我们的类,并且设置成员变量,那么django就会自动创建表,并且会添加id字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from django.db import models

# Create your models here.

class UserInfo(models.Model):
name = models.CharField(verbose_name="姓名",max_length=32) # verbose_name 就是对这个字段的注释
pwd = models.CharField(max_length=64)
age = models.IntegerField()
# grender_choices 表示这个字段只能在这两个值中选,
# 并且当我们查询的时候,直接使用 obj.get_gender_display 就可以自动做一个映射
gender_choices = (
(1,"男"),
(0,"女"),
)
gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)
# 建立外键,to是标记与哪个表关联,to_field 标记与该表的哪一列关联
# Django在生成数据表的时候,会把这个外键的字段写成 depart_id
# on_delete=models.CASCADE 是级联删除,就是这个人的部门如果不在了,把这个人的数据也删了
# 如果不设置级联删除,那么就需要设置外键可以为空,即 null=True,blank=True,on_delete=models.SET_NULL
# 我们取数据的时候 直接使用 obj.depart 就可以获取到这个id对应的那一行的对象,然后直接可以获得部门名称 obj.depart.name
depart = models.ForeignKey(to='Department',to_field='id',on_delete=models.CASCADE)
# 时间类型
create_time = models.DateTimeField(verbose_name="入职时间")

在终端中运行下面的命令,注意,你的app一定要注册

1
2
3
python manage.py makemigrations

python manage.py migrate

登录数据库后输入下列命令可以查看信息,表的名字是app的名字和类名的组合

1
2
3
4
5
6
7
show databases;

use djstudy;

show tables;

desc app1_userinfo;

以后如果想对表的结构进行调整,就在 models.py 文件中进行修改,并且使用上面的命令更新,注意,如果表中已经有数据了,那么新增字段时可能需要设置默认值或者允许为空,实在不行就只能删库了

操作表中数据

操作表中的数据,一般就是我们的业务逻辑,写在views.py 中,首先在views.py中引入models中的类

1
from app1.models import UserInfo

然后就可以对数据进行增删改查的操作了

  1. 添加数据

    1
    2
    UserInfo.objects.create(name="yjr1100",pwd="123",age=100)
    UserInfo.objects.create(name="yjr-1100",pwd="134",age=90)
  2. 删除数据

    1
    2
    3
    4
    5
    # 在filter中写筛选条件
    result = UserInfo.objects.filter(name='yjr1100').delete()
    # 会返回删除的个数,以及数据信息
    # 删除所有的数据
    UserInfo.objects.all().delete()
  3. 查询数据

    1
    2
    3
    4
    5
    6
    7
    # 查询数据
    # 得到的是一个列表,里面是一个一个的对象
    queryset = UserInfo.objects.all()
    queryset = UserInfo.objects.filter(name='yjr1100')
    obj = UserInfo.objects.filter(name='yjr1100').first()
    for user in queryset:
    print(user.age)
  4. 更新数据

    1
    UserInfo.objects.filter(name='yjr1100').update(pwd = "7777")

Django 中的Form和ModelForm