案例
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)