搭建Django项目
创建项目
cmd 模式 django-admin startproject myproject
cd myproject
django-admin startapp myprojectapp
settings.py文件中INSTALLED_APPS注册APP
pycharm中新建虚拟环境,在setting>Python Interpreter>add,安装所以要依赖
安装 mysqlclient依赖【pip install mysqlclient】,下载好安装包,本地命令安装
mysqlclient-1.4.6-cp38-cp38-win32.whl
创建数据库【CREATE DATABASE mytable CHARACTER SET utf8 COLLATE utf8_general_ci】
Django连接数据库,settings中修改DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mypriject',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
models
myprojectapp目录下新建models文件夹
base.py
from django.db import models
class CommonInfo(models.Model):
create_time = models.DateTimeField('创建时间', auto_now_add=True, null=True)
update_time = models.DateTimeField('更新时间', auto_now_add=True)
desc = models.CharField('描述', null=True, blank=True, max_length=300)
class Meta:
abstract = True
ordering = ['id']
user.py
from django.db import models
from .base import CommonInfo
class User(CommonInfo):
user_type_choose = (
(0, "普通用户"),
(1, "VIP用户"),
(2, "超级用户"),
)
name = models.CharField('用户姓名', max_length=32)
phone = models.CharField('手机号', max_length=11, unique=True, null=True, blank=True)
password = models.CharField('密码', max_length=15)
user_model = models.SmallIntegerField('用户类型', choices=user_type_choose, default=0)
__init__.py
from .user import User
from .base import CommonInfo
生成表结构
python manage.py migrate
python manage.py makemigrations
serializers
myprojectapp目录下新建serializers文件夹
user.py
from rest_framework import serializers
from ..models import User
class UserSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'name', 'phone', 'password', 'user_model', 'desc', 'create_time', 'update_time']
__init__.py
from .user import UserSerializers
views
myprojectapp目录下新建views文件夹
user.py
from ..serializers import UserSerializers
from ..models import User
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializers
__init__.py
from .user import UserSerializers
user_list.py
from ..serializers import UserSerializers
from ..models import User
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.decorators import api_view, authentication_classes, permission_classes, action
import logging
log = logging.getLogger('log')
# 要加特殊方法api_view,不然序列化器不知道是哪一个
@api_view(['GET'])
def user_list(request):
quesry_set = User.objects.all()
serializer = UserSerializers(quesry_set, many=True)
return Response(serializer.data)
@api_view(['GET'])
def user_detail(request, _id):
try:
user = User.objects.get(pk=_id)
except User.DoesNotExist:
return Response("无数据")
serializer = UserSerializers(instance=user)
return Response(serializer.data)
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
request_body = openapi.Schema(type=openapi.TYPE_OBJECT,
required=['name', 'phone', 'password', 'user_model', 'desc', 'create_time', 'update_time'],
properties={
'name': openapi.Schema(type=openapi.TYPE_STRING, description='姓名'),
'phone': openapi.Schema(type=openapi.TYPE_NUMBER, description='手机号'),
'password': openapi.Schema(type=openapi.TYPE_STRING, description='密码'),
'user_model': openapi.Schema(type=openapi.TYPE_NUMBER, description='用户类型')})
# 自定义swagger内容
@swagger_auto_schema(method='post', request_body=request_body, )
@api_view(['POST'])
def user_add(request):
data = request.data
phone = data["phone"]
name = data['name']
serializer = UserSerializers(data=request.data)
# print(data)
if serializer.is_valid():
if len(User.objects.filter(name=name)) != 0:
log.info("请求入参:%s" % serializer.data)
return Response("name已存在")
elif len(phone) != 11:
log.info("请求入参:%s" %serializer.data)
return Response("手机号长度不合法")
else:
serializer.save()
log.info("请求入参:%s" % serializer.data)
return Response("新增成功")
log.info("请求入参:%s" % serializer.data)
return Response(serializer.errors)
__init__.py
from .user import UserViewSet
url
myproject.url.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('mythreeapp.urls')),
]
myprojectapp.url.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import UserViewSet
from mythreeapp.views import userlist
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view( # 文档视图
openapi.Info(
title='myproject API DOC',
default_version='v1',
description='myprojectapp接口文档',
terms_of_service='https://www.baidu.net',
license=openapi.License(name='BSD License')
),
public=True,
permission_classes=(permissions.AllowAny,)
)
router = DefaultRouter()
router.register(r'user', UserViewSet), # 将视图信息注册路由列表
urlpatterns = [
path('', include(router.urls)),
path('user_list/', userlist.user_list),
path('user_detail/<int:_id>', userlist.user_detail),
path('user_add/', userlist.user_add),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='redoc-ui'),
]
启用
ALLOWED_HOSTS = [‘*’]
python manage.py runserver 0.0.0.0:8000