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

pymysql

  做用:链接mysql数据库html

  下载:pip install pymysqlpython

  配置和使用:

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两条命令就能够在将模型类同步到数据库。mysql

djangorestframework

  做用:后端代码写接口使用git

  下载:pip install djangorestframeworkgithub

配置和使用: 

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跨域问题ajax

  下载:pip install django-cors-headersredis

配置和使用: 

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

  做用:图片处理模块sql

  下载: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

  做用:登录模块django

  下载: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, \   CacheResponseMixinfrom rest_framework.mixins import ListModelMixin, RetrieveModelMixinclass One(ListCacheResponseMixin, ListModelMixin):   passclass Two(RetrieveCacheResponseMixin, RetrieveModelMixin):   passclass Three(CacheResponseMixin, ListModelMixin, RetrieveModelMixin):   pass
相关文章
相关标签/搜索