做用:链接mysql数据库html
下载:pip install pymysqlpython
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' #登录用户的密码 } }
import pymysql pymysql.install_as_MySQLdb()
在pycharm打开Terminal(在界面底部能够找到),在不一样app下的models.py来建立模型类,而后依次执行python manage.py makemigrations和python manage.py migrate两条命令就能够在将模型类同步到数据库。mysql
做用:后端代码写接口使用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使用 ]
做用:解决CORS跨域问题ajax
下载:pip install django-cors-headersredis
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
做用:图片处理模块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}), ]
做用:登录模块django
下载:pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 -i https://pypi.douban.com/simple/ (#该命令是安装经过豆瓣源安装最新版xadmin)
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)
from .models import BannerInfo class BannerInfoModelAdmin(object): list_display=["title","orders","is_show"]
# BannerInfo是自定义模型类 xadmin.site.register(BannerInfo, BannerInfoModelAdmin)
做用:用户记录用户用户登录状态,能够实现分布式站点单点登录
下载: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数据库
下载: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项目中用与过滤字段
下载:pip install django-filter
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
INSTALLED_APPS = [ ... 'ckeditor', # 富文本编辑器 'ckeditor_uploader', # 富文本编辑器上传图片模块 ... ]
# 富文本编辑器ckeditor配置 CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', # 工具条功能 'height': 300, # 编辑器高度 # 'width': 300, # 编辑器宽 }, } CKEDITOR_UPLOAD_PATH = '' # 上传图片保存路径,留空则调用django的文件上传功能
path(r'^ckeditor/', include('ckeditor_uploader.urls')),
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, \ CacheResponseMixinfrom rest_framework.mixins import ListModelMixin, RetrieveModelMixinclass One(ListCacheResponseMixin, ListModelMixin): passclass Two(RetrieveCacheResponseMixin, RetrieveModelMixin): passclass Three(CacheResponseMixin, ListModelMixin, RetrieveModelMixin): pass