Django是一款基于Python开发的全栈式一体化Web应用框架。2003年问世之初,它只是美国一家报社的内部工具,2005年7月使用BSD许可证完成了开源。Django采用MTV设计模式,即Model(模型)+Template(模板)+View(视图)。它遵循MVC设计,并且内置了对象关系映射(ORM)层,使得开发者无需关心底层的数据存取细节,可以更专注于业务逻辑的开发。
Django的目的是削减代码量,简单且迅速地搭建以数据库为主体的复杂Web站点。它是全栈式框架,因此安装起来很简单,而且使用者众多。这使得Django除具有完备的官方文档之外,还有大量的关联文档、丰富的第三方库可供使用。与其他框架相比,Django用起来要轻松得多。
优点:
(1)安装mysql数据库,启动服务
(2)打开cmd命令行,进入mysql,并新建数据库
mysql-uroot-pCREATEDATABASEIFNOTEXISTSpython_hotelDEFAULTCHARSETutf8COLLATEutf8_general_ci;(3)恢复sql数据
usexxxsourcexxxx.sql(4)修改settings.py中的配置信息
(5)安装python3.8
(6)安装依赖包
pythonmanage.pyrunserver前端运行步骤(1)安装node16
(2)cmd进入web目录下,安装依赖,执行:
npminstall(3)运行项目
实体设计如下:
关系如下:
数据表设计如下:
下面用房间管理功能来演绎这个流程,其它的管理功能都是这个流程。
第一步:编写实体类
在server下的myapp下的models.py下面新建Thing类。并写入如下代码:
在server下的myapp下的serializers.py下新建ThingSerializer类,并写入代码:
classThingSerializer(serializers.ModelSerializer):#额外字段classification_title=serializers.ReadOnlyField(source='classification.title')classMeta:model=Thingfields='__all__'第三步:编写views层
在server的myapp下的views下,新建Thing.py代码,并写入代码,实现增删改查
第四步:编写界面和API
打开前端web工程,在views文件夹下新建thing.vue文件,并编写代码:
基于ant-design框架的a-table的分页插件。
constservice:AxiosInstance=axios.create({//baseURL:import.meta.env.BASE_URL+'',baseURL:BASE_URL+'',timeout:15000,});//axios实例拦截请求service.interceptors.request.use((config:InternalAxiosRequestConfig)=>{config.headers.ADMINTOKEN=localStorage.getItem(ADMIN_USER_TOKEN);config.headers.TOKEN=localStorage.getItem(USER_TOKEN);returnconfig;},(error:AxiosError)=>{returnPromise.reject(error);},);//axios实例拦截响应service.interceptors.response.use((response:AxiosResponse)=>{if(response.status==200){if(response.data.code==0||response.data.code==200){returnresponse;}else{returnPromise.reject(response.data);}}else{returnPromise.reject(response.data);}},//请求失败(error:any)=>{console.log(error.response.status);if(error.response.status==404){//todo}elseif(error.response.status==403){//todo}returnPromise.reject(error);},);权限控制模块权限控制使用了BaseAuthentication实现的,具体代码可参考authentication.py
fromrest_frameworkimportexceptionsfromrest_framework.authenticationimportBaseAuthenticationfrommyapp.modelsimportUser#接口认证classAdminTokenAuthtication(BaseAuthentication):defauthenticate(self,request):adminToken=request.META.get("HTTP_ADMINTOKEN")print("检查adminToken==>"+adminToken)users=User.objects.filter(admin_token=adminToken)"""判定条件:1.传了adminToken2.查到了该帐号3.该帐号是管理员或演示帐号"""ifnotadminTokenorlen(users)==0orusers[0].role=='2':raiseexceptions.AuthenticationFailed("AUTH_FAIL_END")else:print('adminToken验证通过')路由模块实现前端的路由是基于vue-router框架实现的,路由文件位于src的rooter的root.js文件中。预览如下:
我们使用了django的AnonRateThrottle限流类来实现的。可以参见myapp的auth目录下的MyRateThrottle.py文件
classMyRateThrottle(AnonRateThrottle):THROTTLE_RATES={"anon":"2/min"}#限流每分钟只能请求2次当某个api接口需要限流的时候,只需要添加注解即可,如下所示
@api_view(['POST'])@throttle_classes([MyRateThrottle])#限流注解defcreate(request):serializer=CommentSerializer(data=request.data)ifserializer.is_valid():serializer.save()returnAPIResponse(code=0,msg='创建成功',data=serializer.data)else:print(serializer.errors)returnAPIResponse(code=1,msg='创建失败')常见问题数据库版本有要求吗?需要mysql5.7以上
使用国内镜像安装,设置命令为:
修改store文件夹下的constants.js文件中的BASE_URL,改成你自己的后端地址
在views文件夹下创建新的vue文件,写入界面代码,然后在router的root.js中添加路由即可。