Django开发--知识回顾

发布时间 2023-10-30 12:08:10作者: 可可eleven
  • 安装Django
pip install django
  • 创建Django项目
django-admin startproject mysite

  注意:pycharm也可以创建Django项目

  如果用pycharm创建,记得settings.py中的DIR里的信息删除

  •  创建APP
python manage.py startapp app01
python manage.py startapp app02
python manage.py startapp app03
  • 注册APP
INSTALLED_APPS = [
 ...
    'app01',
]

  注意:一定要注册APP,否则APP下的models.py写类时,无法在数据库中创建表。

  • 配置静态文件路径&模板的路径(放在APP目录下)
  • 配置数据库相关操作(MySQL)

  第三方模块(django3版本)

pip install mysqlclient

  自己先去MySQL创建一个数据库

  配置数据库连接(settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myproject',
        'USER': 'name',
        'PASSWORD': 'xxxxxxxxx',
        'HOST': '',  #127.0.0.1(本机)
        'PORT': 端口号,
    }
}

  在APP下的models.py中编写表结构

  

from django.db import models

# Create your models here.

#设计表结构
class Admin(models.Model):
    """管理员表"""
    username = models.CharField(verbose_name="用户名", max_length=32)
    password = models.CharField(verbose_name="密码", max_length=64)

    def __str__(self):
        return self.username

class Department(models.Model):
    """
    部门表(django会自动生成id,并且为主键,自增)
    verbose_name="标题"是用来记录的,一眼能看出这行代表什么,可不写
    """
    title = models.CharField(verbose_name="标题", max_length=32)

    def __str__(self):
        return self.title

class UserInfo(models.Model):
    """
    员工表
    acount = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2, default=0)
    max_digits=10数字总长度为10位
    decimal_places=2小数占两位
    default=0新建账户默认为0
    """
    name = models.CharField(verbose_name="姓名", max_length=16)
    password = models.CharField(verbose_name="密码", max_length=64)
    age = models.IntegerField(verbose_name="年龄")
    acount = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2, default=0)
    # DateTimeField年月日时分秒
    # creata_time = models.DateTimeField(verbose_name="入职时间")
    # DateTimeField年月日时分秒,入职时间不需要时分秒,只要年月日用DateField
    creata_time = models.DateField(verbose_name="入职时间")

    #无约束
    # depart_id = models.BigIntegerField(verbose_name="部门ID")

    # 有约束,depart = models.ForeignKey(to="Department", to_field="id")
    # to="Department"与哪张表关联
    # to_field="id"与表中的哪一列关联
    #用ForeignKey时,写的depart,但生成列为depart_id
    # depart = models.ForeignKey(to="Department", to_field="id")

    #第一种 部门表被删除(部门表使用了外键),级联删除on_delete = models.CASCADE
    depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", on_delete=models.CASCADE)

    # 第二种:置空,让他变为空置
    # null = True, blank = True设置这列允许为空
    # depart = models.ForeignKey(to="Department", null=True, blank=True, on_delete=models.SET_NULL)

    #在django代码中做约束,gender性别约束后在数据库中只能选择1和2
    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices)

class PrettyNum(models.Model):
    """靓号表"""
    # CharField必须设置长度
    mobile = models.CharField(verbose_name="手机号", max_length=11)
    # null = True, blank = True允许为空
    price = models.IntegerField(verbose_name="价格", default=0)

    level_choices = {
        (1, "1级"),
        (2, "2级"),
        (3, "3级"),
        (4, "4级"),
    }
    level = models.SmallIntegerField(verbose_name="级别", choices=level_choices, default=1)

    status_choices = {
        (1,"已占用"),
        (2,"未占用"),
    }
    status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=2)

class Task(models.Model):
    """任务"""

    level_choices = (
        (1, "紧急"),
        (2, "重要"),
        (3, "临时"),
    )
    level = models.SmallIntegerField(verbose_name="级别", choices=level_choices, default=1)
    title = models.CharField(verbose_name="标题", max_length=64)
    detail = models.TextField(verbose_name="详细信息")
    user = models.ForeignKey(verbose_name="负责人", to=Admin, on_delete=models.CASCADE)

  生成表(执行两个命令)

python manage.py makemigrations
python manage.py migrate
  • 在urls.py中,路由(创建URL和视图函数的对应关系)
  • 在views.py中,编写视图函数(编写业务逻辑的)
  • 在templates目录中,编写HTML模板(含有模板语法,可以继承(公共的部分)、静态文件({%  static  'xx'  %}))
  • ModelForm & Form组件,开发增删改查功能
  1. 生成HTML标签(生成默认值)
  2. 请求数据进行校验
  3. 保存到数据库(ModelForm)
  4.  获取错误信息
  • Cookie和Session,将用户登录信息保存起来,下一次登录的时候直接读取就可以了。
  • 中间件,基于中间件实现用户认证(统一做,不用一个个单独实现),基于process_request方法。
  • ORM操作
models.User.objects.filter(id="xxx")
models.User.objects.filter(id="xxx").order_by("-id")
  •  分页组件
  • Ajax请求