数据库兼容问题

数据库驱动:

安装:pip install pymysql

  1. __init__.py
  2. import pymysql
  3. pymysql.install_as_MySQLdb()
  4. pymysql.version_info = (1, 4, 13, "final", 0)
  5. setting.py
  6. DATABASES = {
  7. 'default': {
  8. 'ENGINE': 'django.db.backends.mysql',
  9. 'NAME': "test_platform",
  10. "USER":"root",
  11. "PASSWORD":"root",
  12. "HOST":"111.229.54.5",
  13. "PORT":3306,
  14. "TEST":{
  15. "CHARSET":"utf8",
  16. "COLLATION":"utf8_general_ci"
  17. }
  18. }
  19. }

版本判断问题:

image.png
解决方案:
讲下面这段代码注释
image.png

套接字编码问题:

python3和Python2在套接字返回值解码上的区别
python2是用decode,python3是用encode,而下载的默认文件里面是decode
解决方案:
E:\install\python3.7\Lib\site-packages\django\db\backends\mysql\operations.py
改成下面这段代码

if query is not None:
    if type(query) == byte:
      query = query.decode(errors='replace')
    elif type(query) == str:
      query = query.encode(errors='replace')
    else:
      query = force_text(query,errors='replace')

时区问题解决方案

问题描述:
model自动生成的create_time时间不准
问题原因:
django默认格林威治时间,所以要改成中国时区得修改默认配置,如下:
解决方案:
settings.py将时区相关变量改成下面这些

# 语言
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# 时区
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

跨域解决方案

安装

pip install django-cors-headers

setting配置

# 加入跨域包
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders' # 引入第三方库
]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 跨域设置(必须在django.middleware.csrf.CsrfViewMiddleware的上面)
    'corsheaders.middleware.CorsMiddleware',# 这个是新增的
    'django.middleware.common.CommonMiddleware',
    # csrf攻击跳过(前后端分离不需要做)
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 跨域忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# 允许跨域请求的白名单
# CORS_ORIGIN_WHITELIST = (
#     '*'
# )
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)
CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)

注意跨域白名单!!!

CORS_ORIGIN_WHITELIST
错误代码(版本小于3.0需要这样写)

django问题与解决方案 - 图3
修改代码(版本大于3.0需要这样写):django问题与解决方案 - 图4