用于Django框架很酷。

django-cool的Python项目详细描述


https://img.shields.io/pypi/v/django-cool.svg

Django 框架快速使用扩展库

【阅读文档】

本项目在以下代码托管网站同步更新:

安装与升级

目前 Django Cool 支持的 Python 环境有 3.6, 3.7, 3.8 支持 Django 版本 2.2, 3.0, 3.1

为了简化安装过程,推荐使用 pip 进行安装

pip install django-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 中添加 cool

INSTALLED_APPS=(...'cool',)

settings.py 中设置 DJANGO_COOL

DJANGO_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.urlpatterns

urls.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项目

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么即使我已经给出了代码中的所有权限,该代码也没有在emulator中运行?   java Android Studio正在抛出“线程中的异常”main“javax.net.ssl.SSLException:收到致命警报:协议\版本”   java中的for循环嵌套foreach语句   java读取/src/main/resources和/webinf/classes下的文件   java无法以此格式构造JSON响应   身份验证尝试从CAS secure rest api获取响应,但从java客户端获取登录页面作为响应   如何在java中使用excel从第1列和第3列获取单元格值,并将其作为键值对放入map中   在Java程序中打开Windows虚拟键盘   java有没有递归调用findMatch的方法?   java Pig脚本/命令,用于根据多个字符串筛选文件   java最小数量应匹配,应与POST匹配   java打开/关闭声音按钮不工作   Java嵌入式数据库持久性   java在方法调用时引发异常   java文本文件被覆盖而不是保存的问题   java Hibernate sql注释