- 安装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组件,开发增删改查功能
- 生成HTML标签(生成默认值)
- 请求数据进行校验
- 保存到数据库(ModelForm)
- 获取错误信息
- Cookie和Session,将用户登录信息保存起来,下一次登录的时候直接读取就可以了。
- 中间件,基于中间件实现用户认证(统一做,不用一个个单独实现),基于process_request方法。
- ORM操作
models.User.objects.filter(id="xxx")
models.User.objects.filter(id="xxx").order_by("-id")
- 分页组件
- Ajax请求