• django项目常用外部模块下载和使用


    pymysql

      作用:连接mysql数据库

      下载:pip install pymysql

      配置和使用:

    1.在配置文件下(默认是在settings.py文件下)

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            #改成mysql默认是sqlite3
            'NAME': 'luffy',
            #自己创建的数据库名字
            'HOST': '127.0.0.1',
            #数据库的ip地址,本地ip可以是'127.0.0.1'或者'localhost'
            'PORT': 3306,
            #mysql数据库端口号3306
            'USER': 'luffy_user',
            #登陆数据库的用户名
            'PASSWORD': 'luffy'
            #登陆用户的密码
        }
    }                

    2.在settings.py文件同目录下的__init__.py下配置

    import pymysql
    pymysql.install_as_MySQLdb()

    3.执行迁移命令

      在pycharm打开Terminal(在界面底部可以找到),在不同app下的models.py来创建模型类,然后依次执行python manage.py makemigrations和python manage.py migrate两条命令就可以在将模型类同步到数据库。

    djangorestframework

      作用:后端代码写接口使用

      下载:pip install djangorestframework

    配置和使用: 

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        'rest_framework',
        #注册rest_framework模块,然后就可以在视图函数通过import使用
        
    ]

    django-cors-headers

      作用:解决CORS跨域问题

      下载:pip install django-cors-headers

    配置和使用: 

    app注册

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        'corsheaders',
        #django-cors-headers模块注册
        'rest_framework',
        #djangorestframework模块注册
    ]

    中间件注册

    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        #必须放在第一位
        ...
    ]

    添加白名单

    # CORS组的配置信息
    CORS_ORIGIN_WHITELIST = (
        'www.luffycity.cn:8080',#白名单的url
    )
    CORS_ALLOW_CREDENTIALS = False  # 允许ajax跨域请求时携带cookie

     piplow

      作用:图片处理模块

      下载:pip install pillow

    配置和使用: 

      配置文件添加

    # 项目中存储上传文件的根目录[暂时配置],注意,uploads目录需要手动创建否则上传文件时报错
    MEDIA_ROOT=os.path.join(BASE_DIR,"uploads")
    # 访问上传文件的url地址前缀
    MEDIA_URL ="/media/"

      总路由添加

    from django.urls import re_path
    from django.conf import settings
    from django.views.static import serve
    
    urlpatterns = [
          ...
        re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
    ]

    xadmin

      作用:登陆模块

      下载:pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 -i https://pypi.douban.com/simple/  (#该命令是安装通过豆瓣源安装最新版xadmin)

    配置和使用: 

      在配置文件的INSTALLED_APPS中注册

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        'corsheaders',
        #django-cors-headers模块注册
        'rest_framework',
        #djangorestframework模块注册
        #新增xadmin注册
        'xadmin',
        'crispy_forms',
        'reversion',
    ]

      由于xadmin模块中有自己的数据库模型类,所以在使用之前需要进行数据库迁移

      添加路由

    import xadmin
    xadmin.autodiscover()
    
    # version模块自动注册需要版本控制的 Model
    from xadmin.plugins import xversion
    xversion.register_models()
    
    urlpatterns = [
        path(r'xadmin/', xadmin.site.urls),
    ]

      设置站点信息:

        在app下的新建adminx.py文件,在该文件写基本站点配置信息类,通过xadmin.site.register来注册功能,如:

    import xadmin
    from xadmin import views
    
    class BaseSetting(object):
        """xadmin的基本配置"""
        enable_themes = True  # 开启主题切换功能
        use_bootswatch = True
    
    xadmin.site.register(views.BaseAdminView, BaseSetting)
    
    class GlobalSettings(object):
        """xadmin的全局配置"""
        site_title = "路飞学城"  # 设置站点标题
        site_footer = "路飞学城有限公司"  # 设置站点的页脚
        menu_style = "accordion"  # 设置菜单折叠
    
    xadmin.site.register(views.CommAdminView, GlobalSettings)

      将模型类注册到xadmin中

    from .models import BannerInfo
    class BannerInfoModelAdmin(object):
        list_display=["title","orders","is_show"]
    # BannerInfo是自定义模型类 xadmin.site.register(BannerInfo, BannerInfoModelAdmin)

    JWT

      作用:用户记录用户用户登陆状态,可以实现分布式站点单点登陆

      下载:pip install djangorestframework-jwt

    配置和使用:

      在配置文件中添加以下代码

    REST_FRAMEWORK = {
        #用户发送信息检测信息,添加第一行是JWT验证
        'DEFAULT_AUTHENTICATION_CLASSES': (
           'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
    }
    import datetime
    JWT_AUTH = {
        #JWT有效期设置
        'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    }

      手动生成JWT验证(当用户注册后可以手动生成JWT返回给用户,这样就可以省去登陆)

    from rest_framework_jwt.settings import api_settings
    
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
    #user是用户表的一条数据
    payload = jwt_payload_handler(user)
    token = jwt_encode_handler(payload)

      登陆验证路由

    from rest_framework_jwt.views import obtain_jwt_token
    
    urlpatterns = [
        path(r'authorizations/', obtain_jwt_token, name='authorizations'),
    ]

      自定义返回值

    由于登陆使用jwt认证,系统会默认返回token值不返回其他值,需要自定义则新建文件,

    def jwt_response_payload_handler(token, user=None, request=None):
        """
        自定义jwt认证成功返回数据
        """
        return {
            'token': token,
            'id': user.id,
            'username': user.username
        }

    在配置文件中添加配置

    # JWT
    JWT_AUTH = {
        'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
        'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
    }

    django-redis

      作用:在django项目中使用redis数据库

      下载:pip install django-redis

    配置和使用:

      在django中提供了对缓存的配置:CACHES

      在配置文件中添加

    # 设置redis缓存
    CACHES = {
        # 默认缓存
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            # 项目上线时,需要调整这里的路径
            "LOCATION": "redis://127.0.0.1:6379/0",
    
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        },
        # 提供给xadmin或者admin的session存储
        "session": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        },
        # 提供存储短信验证码
        "sms_code":{
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/2",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }
    
    # 设置xadmin用户登录时,登录信息session保存到redis
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "session"

      使用:

    1.在需要对redis数据库操作给文件导入文件:from djagno_redis improt get_redis_connection

    2.实例化对象,然后通过对象.方法的方式可以操作数据库,具体方法:http://django-redis-chs.readthedocs.io/zh_CN/latest/

     django-filter

      作用:在django项目中用与过滤字段

      下载:pip install django-filter

    配置和使用:

    在配置文件中的INSTALLED_APPS添加

    INSTALLED_APPS = [
        ...
        'django_filters',  # 需要注册应用,
    ]

    使用:

      在视图类中添加字段,filter_backends和filter_fields两个字段,这两个字段都是可以有多个,所以放在元组或者列表里面。

      filter_backends:是用与过滤的类,这个类可以从django_filters.rest_framework中导入

      filter_fields:要过滤的字段名,这个字段必须是要在需要过滤的模型类中的字段

      例子:

    from .serializers import CourseModelSerializer  #自定义序列化器
    from django_filters.rest_framework import DjangoFilterBackend  #django-filter提供的类
    class CourseAPIView(ListAPIView):
        '''自定义视图类'''
        queryset = Course.objects.filter(is_delete=False, is_show=True).order_by("orders")
        serializer_class = CourseModelSerializer
        # 新增过滤使用的字段
        filter_backends = [DjangoFilterBackend, ]
        filter_fields = ('course_category',)    

    CKEditor(富文本编辑器)

      作用:设置某一模型类中的某一字段,那么该字段就变成可编辑的字段,即可以根据后台人员需求对字段排版生成对应的html文本

       下载:pip install django-ckeditor

    配置和使用:

    1.在配置文件中的INSTALLED_APPS添加

    INSTALLED_APPS = [
        ...
        'ckeditor',  # 富文本编辑器
        'ckeditor_uploader',  # 富文本编辑器上传图片模块
        ...
    ]

    2.在配置文件中添加以下配置:

    # 富文本编辑器ckeditor配置
    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'full',  # 工具条功能
            'height': 300,      # 编辑器高度
            # 'width': 300,     # 编辑器宽
        },
    }
    CKEDITOR_UPLOAD_PATH = ''  # 上传图片保存路径,留空则调用django的文件上传功能

    3.添加路由,在总路由中添加

    path(r'^ckeditor/', include('ckeditor_uploader.urls')),

    4.在需要编辑的模型类中修改字段,如:

    from ckeditor_uploader.fields import RichTextUploadingField
    
    class Course(models.Model):
        """
        专题课程
        """
        ...
        
        brief = RichTextUploadingField(max_length=2048, verbose_name="课程概述", null=True, blank=True)

    富文本编辑器内还可以自定义编辑显示的界面,可以参考https://github.com/django-ckeditor/django-ckeditor

    drf-extensions

      作用:某些经常需要改动的数据放到缓存中,减少对数据库的查询次数,提高查询速度

      安装:pip install  drf-extensions

    使用方法:

    装饰器

      再视图方法是添加装饰器cache_response(timeout,cache)如:

    from rest_framework_extensions.cache.decorators import cacha_response
    from rest_framework.views import APIView
    
    class MyAPIView(APIView):
    
        @cacha_response(timeout=24*60*60, cache="sms_code" )
       def get(self,request): 
         pass

      此外,可以将装饰器的两个参数放到配置文件中(默认settings.py),如

    REST_FRAMEWORK_EXTENSIONS = {
        # 缓存时间
        'DEFAULT_CACHE_RESPONSE_TIMEOUT':24 * 60 * 60,
        # 缓存存储
        'DEFAULT_USE_CACHE': 'sms_code',
    }

    继承模块提供的个扩展类:

    ListCacheResponseMixin:用与缓存返回列表数据的视图,与ListModelMixin扩展类配置实用
    RetrieveCacheResponseMixin:用与缓存返回单一数据的视图,与RetrieveModelMixin扩展类配置实用
    CacheResponseMixin:可以理解为ListCacheResponseMixin和RetrieveCacheResponseMixin两个类的合集,实际上该类就是继承上面两个类,且没有任何写任何逻辑方法和属性
    from rest_framework_extensions.cache.mixins import ListCacheResponseMixin, RetrieveCacheResponseMixin, 
    CacheResponseMixin
    from rest_framework.mixins import ListModelMixin, RetrieveModelMixin


    class One(ListCacheResponseMixin, ListModelMixin):
    pass


    class Two(RetrieveCacheResponseMixin, RetrieveModelMixin):
    pass


    class Three(CacheResponseMixin, ListModelMixin, RetrieveModelMixin):
    pass
  • 相关阅读:
    文件操作:根据现有类生成所需要的类
    Microsoft JScript 运行时错误: “”未定义
    未完成
    WPF模拟雷达界面效果图
    WebClient模拟网页提交表单
    201319
    Delphi中的InStrRev函数(倒找文本)
    利用IDhttp实现图片下载
    白话解释哈希表
    整理的Delphi常用字符串函数
  • 原文地址:https://www.cnblogs.com/mark--ping/p/11527445.html
Copyright © 2020-2023  润新知