zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【贪心】【堆】Gym
    【并查集】Gym
    【拓扑排序】【bitset】Gym
    【递归】【线段树】【堆】AtCoder Regular Contest 080 E
    【二分图】【并查集】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem L. Canonical duel
    【动态规划】【滚动数组】【bitset】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal
    【二分】【字符串哈希】【二分图最大匹配】【最大流】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem I. Minimum Prefix
    【枚举】【最小表示法】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem F. Matrix Game
    【推导】【构造】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem E. Space Tourists
    【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures
  • 原文地址:https://www.cnblogs.com/mark--ping/p/11527445.html
Copyright © 2011-2022 走看看