drf使用mongodb开发vsp平台设计(python)
安装mongodb(并且安装MongoDB 的图形界面MongoDB Compass)、pycharm、postman(做测试)
一、创建项目
- 创建项目,项目名称vsp,其他选项默认(会自动创建虚拟环境)
- 创建django项目,在终端窗口输入
(venv) F:\python_charm\vsp>django-admin startproject vspproject .
(注意在结尾有个“.”,如果没有的话会创建一个完整的django项目目录,但第一步我们已经创建过了)
以上步骤完成后得到如下目录结构
- 安装django包,文件>设置>项目>Python解释器,搜索安装django包,我的版本是3.1.5
- 修改配置文件,打开vspproject下的settings.py文件,将
ALLOWED_HOSTS = []
修改为ALLOWED_HOSTS = ['*']
,这样允许任何ip地址的前端连接进行调试,也可以直接输入ip地址,但考虑到会经常发生变化,这样没那么麻烦 - 启动服务,
(venv) F:\python_charm\vsp>python manage.py runserver 0.0.0.0:8000
服务启动成功,按下 ctrl+c 退出
二、创建单个应用
这里以用户管理模块为例
- 首先进入到刚刚创建的目录中
(venv) F:\python_charm\vsp>cd vspproject
- 创建用户管理应用
(venv) F:\python_charm\vsp\vspproject>django-admin startapp userapp
得到如下目录结构
- 创建用户models,在userapp下能够直接找到models.py,输入以下内容(安装mongoengine包,我的版本是0.22.1)
from mongoengine import *
connect('userdb', host='127.0.0.1', port=27017) # 连接userdb数据库
usertype = (0, 1, 2) # 三种用户类型:0:二次开发平台用户;1:平台管理用户;2:生产应用平台用户
class usertable(Document):
UserName = StringField(required=True, unique=True, max_length=32, min_length=4) # 用户登陆名(建议用电话号码或者邮箱),唯一
Password = StringField(required=True, max_length=32, min_length=6) # 登录密码
UserType = IntField(required=True, choices=usertype) # 用户类型
GroupID = IntField(required=False) # 用户工作组
LoginTime = DateTimeField(required=False) # 上次登录时间
UserStatus = IntField(required=False, choices=(0, 1)) # 用户状态:1:登陆状态;0:未登录状态
UserDocument= StringField(required=False) # 用户目录
class grouptable(Document):
GroupID = IntField(required=True) # 工作组编号
GroupName = StringField(required=True) # 工作组名称
GroupDescript = StringField(required=False) # 工作组描述
- 创建一个序列化类,在userapp的目录下创建一个名为serializers.py文件,输入以下内容(安装django-rest-framework-mongoengine包,我的版本是3.4.1)
from rest_framework_mongoengine import serializers
from . import models
#序列化
class usertable_s(serializers.DocumentSerializer):
class Meta:
model=models.usertable
fields = '__all__'
class grouptable_s(serializers.DocumentSerializer):
class Meta:
model=models.grouptable
fields = '__all__'
- 在settings.py中设置包含的包
INSTALLED_APPS = (
...
'rest_framework',
'rest_framework_mongoengine',
'vspproject.userapp',
...
)
- 编写常规的Django视图(views),打开userapp下的views.py输入以下内容(安装djangorestframework 版本3.12.2 )
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from rest_framework import status,mixins,generics
from vspproject.userapp.serializers import usertable_s,grouptable_s
from vspproject.userapp.models import usertable,grouptable
from django.http import HttpResponse, JsonResponse
from datetime import datetime
#用户注册
class UserRegister(APIView):
def post(self,request,format=None):
data = JSONParser().parse(request) # 将流(stream)解析为JSON
serializer = usertable_s(data=data) # 将JSON恢复成正常对象实例
if serializer.is_valid():
serializer.Meta.model.UserDocument="F:\\python_charm\\pythonProject1\\userproject\\"+str(data["UserName"])
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#用户登录
class UserLogin(APIView):
def post(self,request,format=None):
data = JSONParser().parse(request) # 将流(stream)解析为JSON
try:
usertable.objects.get(UserName=data['UserName'])
except usertable.DoesNotExist:
return Response("用户不存在")
# user=usertable.objects(UserName=data['UserName'])
user=usertable.objects.get(UserName=data['UserName'])
if user.Password == data['Password']:
user.UserStatus=1
user.LoginTime=datetime.now()
user.save()
return Response("登陆成功")
return Response("密码错误")
三、设置urls
- 在userapp中添加urls.py文件,添加以下内容
from django.urls import path,re_path
from . import views
urlpatterns=[
path('login/',views.UserLogin.as_view()),
path('register/',views.UserRegister.as_view()),
]
- 在vspproject项目下的urls.py文件中添加以下内容
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/',include('vspproject.userapp.urls')),
]
设置完成后正常启动服务器即可,接下来测试刚刚完成的用户管理模块,打开postman软件
新建一个请求,地址为http://0.0.0.0:8000/user/register/,请求类型为POST,选择Body-raw-JSON,输入以下报文{"UserName":"zhangsan666","Password":"123456789","UserType":"0"}
,发送后得到返回结果:
{
"id": "5fffffae8fa0750eed6a7ced",
"UserName": "zhangsan666",
"Password": "123456789",
"UserType": 0,
"GroupID": null,
"LoginTime": null,
"UserStatus": null,
"UserDocument": "F:\\python_charm\\pythonProject1\\userproject\\zhangsan666"
}
我们再打开MogoDB Compass软件查看,选择userdb数据库下的usertable数据集,能够看到刚刚注册的用户信息
也可以测试下登录功能,再新建一个请求,地址为http://0.0.0.0:8000/user/login/,请求类型为POST,选择Body-raw-JSON,输入以下报文{"UserName":"zhangsan666","Password":"123456789"}
,发送后得到返回结果:登陆成功
至此,drf搭配mongodb的基本功能已经实现,如果要添加其他功能模块,参考上面用户管理模块的创建方式。
部分教程和手册
django基础教程(无rest,用的是mysql数据库)
Django REST framework 中文教程(用的是mysql数据库)
django rest framework 官方手册(英文)
mongoengine 官方手册(英文)
Django Rest Framework Mongoengine官方手册(英文)
MongoEngine 中文翻译文档