本篇写有部门和员工(为前后端开发)
django:
admin创建超级用户:
at 14:01:52 ❯ python manage.py createsuperuser # 创建超级用户的命令c
用户名 (leave blank to use 'mac'): mmm
电子邮件地址:
Password: # 密码输入时,是看不到的
Password (again):
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
密码只包含数字。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
项目准备:
创建项目:
django-admin startproject django14(项目名)
创建APP:
python manage.py startapp goods(APP名)
修改配置文件: settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # drf框架
'corsheaders', # 跨域APP
'branch' # 自己的APP, 随着自己创建的APP名改变而改变
]
# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 添加跨域中间件
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', # 关闭csrf验证
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True # 允许所有源访问
# 指定图片上传的根路径时,media目录需要手动创建
MEDIA_URL = 'media/(文件名)' # 配置后期图片资源展示的url前缀
MEDIA_ROOT = os.path.join(BASE_DIR, 'media(文件名)') # 指定图片上传的根路径
创建子路由:(goods/urls.py)
python manage.py startapp app名
修改主路由:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings # 图片
from django.conf.urls.static import static # 图片
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('branch.urls')), # 实现路由分发
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# 上传的图片想要展示,需要做路由映射
模型类:
部门:部门名称
class Branch(models.Model):
name = models.CharField(max_length=20, verbose_name='部门', unique=True) # unique=True 去重
员工:员工名称、所属部门、职位、年龄、入职日期、证件照片
class Staff(models.Model):
name = models.CharField(max_length=20, verbose_name='员工名称')
title = models.CharField(max_length=10, verbose_name='职位')
age = models.IntegerField(verbose_name='年龄')
time = models.DateField(auto_now_add=True, verbose_name='入职日期')
image = models.ImageField(upload_to='image/%y/%m/%d', verbose_name='证件照片')
branch = models.ForeignKey(to=Branch, on_delete=models.CASCADE, verbose_name='所属部门')
DateField(auto_now_add=True, verbose_name=‘创建日期’)
DateField(auto_now=True, verbose_name=‘更新日期’)
生成迁移文件
python manage.py makemigrations
生成表
python manage.py migrate
序列化器
序列化器为了 简化 代码的编写过程
需要在自己在 子应用中,创建 序列化文件, 如 goods/serializers.py
from rest_framework.serializers import ModelSerializer
from branch.models import *
class BranchModelSerializer(ModelSerializer):
class Meta:
model = Branch
fields = '__all__'
class StaffModelSerializer(ModelSerializer):
class Meta:
model = Staff
fields = '__all__'
视图
具体的实现过程, 在子应用中的
views.py
, 如goods/views.py
部门
- 添加
POST cate/ 表单数据
- 展示
GET cate/
from rest_framework.response import Response
from rest_framework.views import APIView
from branch.serializers import *
# Create your views here.
# 分类
class BranchAPIView(APIView):
# 添加 POST cate/ 表单数据
def post(self, request):
# 1. 获取参数
data = request.data
# 2. 创建序列化器对象
ser = BranchModelSerializer(data=data)
# 3. 校验
ser.is_valid(raise_exception=True)
# 4. 保存
ser.save()
# 5. 返回响应
return Response(ser.data, status=201)
# 展示 GET cate/
def get(self, request):
# 1. 查询所有数据
branchs = Branch.objects.all()
# 2. 创建序列化器对象
ser = BranchModelSerializer(branchs, many=True)
# 3. 返回响应
return Response(ser.data)
删除 DELETE cate/id/
class