drf使用mongodb开发vsp平台设计

本文详细介绍了如何使用Django、DRF和MongoDB在VS平台上开发用户管理模块,包括环境配置、模型设计、序列化、视图和URL设置,以及通过Postman进行测试的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drf使用mongodb开发vsp平台设计(python)

安装mongodb(并且安装MongoDB 的图形界面MongoDB Compass)、pycharm、postman(做测试)

一、创建项目

  1. 创建项目,项目名称vsp,其他选项默认(会自动创建虚拟环境)
  2. 创建django项目,在终端窗口输入(venv) F:\python_charm\vsp>django-admin startproject vspproject .(注意在结尾有个“.”,如果没有的话会创建一个完整的django项目目录,但第一步我们已经创建过了)
    以上步骤完成后得到如下目录结构
    在这里插入图片描述
  3. 安装django包,文件>设置>项目>Python解释器,搜索安装django包,我的版本是3.1.5
  4. 修改配置文件,打开vspproject下的settings.py文件,将ALLOWED_HOSTS = []修改为ALLOWED_HOSTS = ['*'],这样允许任何ip地址的前端连接进行调试,也可以直接输入ip地址,但考虑到会经常发生变化,这样没那么麻烦
  5. 启动服务,(venv) F:\python_charm\vsp>python manage.py runserver 0.0.0.0:8000
    在这里插入图片描述
    服务启动成功,按下 ctrl+c 退出

二、创建单个应用

这里以用户管理模块为例

  1. 首先进入到刚刚创建的目录中(venv) F:\python_charm\vsp>cd vspproject
  2. 创建用户管理应用(venv) F:\python_charm\vsp\vspproject>django-admin startapp userapp
    得到如下目录结构
    在这里插入图片描述
  3. 创建用户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)  # 工作组描述

  1. 创建一个序列化类,在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__'
  1. 在settings.py中设置包含的包
INSTALLED_APPS = (
    ...
    'rest_framework',
    'rest_framework_mongoengine',
    'vspproject.userapp',
    ...
)
  1. 编写常规的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

  1. 在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()),
]
  1. 在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 中文翻译文档

参考了这篇文章Django中REST framework与MongoDB的搭配使用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值