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',)
下载: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
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