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

 

posted @ 2019-09-16 15:16  mark平  阅读(881)  评论(0编辑  收藏  举报