前后端分离基础案例解析(单表)

案例

1.

创建项目:django-admin startproject 项目名
创建子应用: python .\manage.py startapp 应用名

2. 项目配置

settings里面配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'myapp',   # 子应用
    'corsheaders',  # 跨域
    'rest_framework',  # drf框架

]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',  # 关闭crf
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    'corsheaders.middleware.CorsMiddleware'  # 跨域中间件
]
# 跨域 允许所有源访问
ROOT_URLCONF = 'day10cyt.urls'

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


LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

3.安装数据库

在项目同名的 init.py文件里

import pymysql
pymysql.install_as_MySQLdb()

4.编写模型类

from django.db import models

# Create your models here.
class Student(models.Model):
    name = models.CharField(max_length=20,verbose_name='姓名')
    score = models.IntegerField(default=0,verbose_name='成绩')
    sex = models.CharField(max_length=5,verbose_name='性别')
    major = models.CharField(max_length=20,verbose_name='专业名')

5.注册模型类

from django.contrib import admin
from myapp.models import Student
# Register your models here.
admin.site.register(Student)

生成迁移文件:python .\manage.py makemigrations

执行迁移:python .\manage.py migrate
创建超级用户:python .\manage.py createsuperuser
接下来添加数据并测试

6.子应用下创建子路由

from django.urls import path
from myapp import views

urlpatterns = [
    #  path('stu/',views.StudentView.as_view()),
    #  path('stu/<int:id>/',views.StudentView2.as_view())
]

项目同名的 urls为路由分发

from django.contrib import admin
from django.urls import path,include
from myapp import urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(urls)),
]

7.序列化器

在子应用下创建serializers.py文件

from rest_framework import serializers
from myapp.models import Student

class StudentSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=20)
    score = serializers.IntegerField()
    sex = serializers.CharField(max_length=20)
    major = serializers.CharField(max_length=20)

    def create(self, validated_data):
        obj = Student.objects.create(
            **validated_data
        )
        return obj
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.score = validated_data.get('score')
        instance.sex = validated_data.get('sex')
        instance.major = validated_data.get('major')
        instance.save()
        return instance


class StudentSerializer2(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = '__all__'

8.视图

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.models import Student
from myapp.szrializers import StudentSerializer2
# from myapp.szrializers import
# Create your views here.

class StudentView(APIView):
    def get(self,request):
        stu = Student.objects.all()
        ser = StudentSerializer2(stu,many=True)
        return Response(ser.data,status=200)

    def post(self,request):
        ser = StudentSerializer2(data=request.data)
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({'msg':'success'},status=201)
        return Response({'msg':'error'},status=400)

class StudentView2(APIView):
    def get(self,request,id):
        try:
            stu_data = Student.objects.get(id=id)
        except Exception as e:
            print(e)
            return Response({'msg':'error'},status=404)
        ser = StudentSerializer2(stu_data)
        return Response(ser.data,status=200)

    def delete(self,request,id):
        try:
            Student.objects.filter(id=id).delete()
        except Exception as e:
            print(e)
            return Response({'msg':'error'},status=404)
        return Response({'msg':'success'},status=204)
    def put(self,request,id):
        try:
            stu_data = Student.objects.get(id=id)
        except Exception as e:
            print(e)
            return Response({'msg':'error'},status=404)
        ser = StudentSerializer2(instance=stu_data,data=request.data)
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({'msg':'success'},status=201)
        return Response({'msg':'error'},status=500)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值