搭建Django项目

搭建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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值