Package: django-cool
Django 框架快速使用扩展库【阅读文档】。本项目在以下代码托管网站同步更新:码云：https://gitee.com/007gzs/django-coolGitHub：https://github.com/007gzs/django-cool安装与升级目前 Django Cool 支持的 Python 环境有 3.6, 3.7, 3.8, 3.9,  3.10
支持 Django 版本 2.2, 3.0, 3.1, 3.2, 4.0为了简化安装过程，推荐使用 pip 进行安装pipinstalldjango-cool升级 Django Cool 到新版本:pip install -U django-cool如果需要安装 GitHub 上的最新代码:pip install https://github.com/007gzs/django-cool/archive/master.zip如果需要展示html接口文档需要安装markdown依赖:pip install markdown如果使用websocket功能需要安装channels依赖:pip install channels>=2.4开始使用settings.py配置在INSTALLED_APPS中添加coolINSTALLED_APPS=(...'cool',)在settings.py中设置DJANGO_COOLDJANGO_COOL={'API_ERROR_CODES':(('ERR_DEMO_NOLOGIN',(10001,'请先登陆')),('ERR_DEMO_NOTFOUND',(10002,'用户名密码错误')),('ERR_DEMO_PERMISSION',(10003,'权限错误')),('ERR_DEMO_DUPLICATE_USERNAME',(10011,'用户名已存在')),('ERR_DEMO_DUPLICATE_MOBILE',(10012,'手机号已存在')),)}models扩展自定义Model继承BaseModel可使用扩展功能：支持字段变更监控记录通过save_changed()保存已修改字段主键唯一键缓存缓存获取：get_obj_by_pk_from_cache()get_obj_by_unique_key_from_cache()删除缓存：flush_cache_by_pk()flush_cache_by_unique_key()flush_cache()搜索字段自动生成get_search_fields()自动生成搜索字段，默认返回所有设置索引的char和int类型字段后台管理扩展BaseModelAdmin提供扩展功能：默认列出所有基础字段增加相关项列，通过外键快速跳转增、删、改权限统一控制提交保存时，检查数据是否被修改使用admin_register()装饰器可以快速将Model注册到后台管理@admin_registerclassModule(BaseModel):name=models.CharField('module name',max_length=255)code=models.CharField('module code',max_length=100,unique=True)@admin_register(list_display=['module','name'],list_filter=['module',],change_view_readonly_fields=['code',],list_editable=['name','module'])classPermission(BaseModel):name=models.CharField('permission name',max_length=255)code=models.CharField('permission code',max_length=100)module=model.ForeignKey(Module,verbose_name='module',to_field='code',db_column='module_code',on_delete=models.PROTECT)api接口扩展CoolBFFAPIView可方便创建application/x-www-form-urlencoded/multipart/form-data方式的接口。Meta类中配置参数列表param_fields后可以自动生成接口文档，自动做参数验证使用ViewSite快速注册接口生成urlpatterns使用样例：views.py:fromcool.viewsimportViewSite,CoolBFFAPIView,ErrorCode,CoolAPIExceptionfromdjango.contrib.authimportauthenticate,loginfromdjango.dbimportIntegrityErrorfromdjango.db.modelsimportQfromrest_frameworkimportfieldsfrom.importserializer,constantssite=ViewSite(name='demo',app_name='demo')@siteclassUserRegister(CoolBFFAPIView):name='用户注册'response_info_serializer_class=serializer.UserSerializerdefget_context(self,request,*args,**kwargs):user=models.User.objects.filter(Q(username=request.params.username)|Q(mobile=request.params.mobile)).first()ifuserisnotNone:ifuser.username==request.params.username:raiseCoolAPIException(ErrorCode.ERR_DEMO_DUPLICATE_USERNAME)elifuser.mobile==request.params.mobile:raiseCoolAPIException(ErrorCode.ERR_DEMO_DUPLICATE_MOBILE)user=models.User()user.username=request.params.usernameuser.mobile=request.params.mobileuser.nickname=request.params.nicknameuser.name=request.params.nameuser.avatar=request.params.avataruser.gender=request.params.genderuser.set_password(request.params.password)try:user.save(force_insert=True)exceptIntegrityErrorasexc:ifexc.args[0]==1062:ifexc.args[1].find('username')>=0:exc=CoolAPIException(ErrorCode.ERR_DEMO_DUPLICATE_USERNAME)elifexc.args[1].find('mobile')>=0:exc=CoolAPIException(ErrorCode.ERR_DEMO_DUPLICATE_MOBILE)raiseexcuser=authenticate(self,base_username=request.params.username,base_password=request.params.password)ifuserisNone:raiseCoolAPIException(ErrorCode.ERR_DEMO_NOTFOUND)login(request,user)returnserializer.UserSerializer(user,request=request).dataclassMeta:param_fields=(('username',fields.CharField(label='登陆名',max_length=64,help_text='字段说明，会显示在接口文档中')),('password',fields.CharField(label='密码'),('gender',fields.ChoiceField(label='性别',choices=constants.Gender.get_choices_list())),('mobile',fields.RegexField(r'1\d{10}',label='手机号')),('nickname',fields.CharField(label='昵称',max_length=255)),('name',fields.CharField(label='姓名',default='',max_length=255)),('avatar',fields.ImageField(label='头像',default=None)),)urls=site.urlsurlpatterns=site.urlpatternsurls.py:fromdjango.contribimportadminfromdjango.urlsimportpath,includefromcool.viewsimportget_api_doc_htmlapi_patterns=[path('demo/',include('example.apps.demo.views')),]urlpatterns=[path('cool/',include('cool.urls')),path('admin/',admin.site.urls),path('api/',include(api_patterns)),path('api_doc.html',get_api_doc_html)]示例项目demo项目