前言
感觉海拉鲁没有想象中那么好玩啊, 虽然才刚出新手村没多久, 感觉还不如jd吸引我
最近要新写一个项目,写篇文章记录下都要那些步骤吧
rest_framework后台创建
装环境, 装python, 装pycharm之前都弄完了,就不写了
不喜欢用虚拟环境(虽然我知道这样不好), 直接用本机环境了
项目相关
创建django项目
django-admin startproject mysite
改setting文件
基础部分
可以考虑把设置拆为dev和prod,但是现在还没用到, 再说吧
改时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
修改可访问范围
ALLOWED_HOSTS = ['*']
注册apps文件夹
由于把app统一收集到apps文件夹中, 需要将apps这个文件夹注册到设置文件中
# 这句本来就有
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 在上面那句话下加这句
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
修改数据库相关
可以改成mysql数据库, 也可以不改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
}
}
}
注册xadmin相关app
由于使用了xadmin, 所以相关app也要注册一下
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 这两个是需要新增的
'xadmin',
'crispy_forms',
]
rest_framework相关
注册rest_framework相关app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
# 这两个是需要新增的
'rest_framework',
'django_filters',
]
身份验证相关设置(rest_framework_jwt)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
# 限流功能
# 'DEFAULT_THROTTLE_CLASSES': ['rest_framework.throttling.AnonRateThrottle', ],
# 'DEFAULT_THROTTLE_RATES': {
# 'anon': '10/h',
# },
}
# 这部分详细请参阅JWT的设置
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_GET_USER_SECRET_KEY': None,
'JWT_PUBLIC_KEY': None,
'JWT_PRIVATE_KEY': None,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_LEEWAY': 0,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7), # seconds=30
'JWT_AUDIENCE': None,
'JWT_ISSUER': None,
'JWT_ALLOW_REFRESH': False,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_AUTH_COOKIE': None,
}
跨域相关
由于前台连后台跨域了, 所以还要配置一下跨域相关设置
注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'rest_framework',
'django_filters',
# 就是这个
'corsheaders',
]
相关配置
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*',
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALL_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
app相关
创建app
python manage.py startapp user_center
去setting里注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'rest_framework',
'django_filters',
'corsheaders',
# 新来的
'user_center',
]
app建设
model
adminx
Serializer
Filter
View
Url
总Url
越往后写越懒了啊
前台相关
首先克隆一份代码
git clone https://github.com/iview/iview.git
修改 libs/axios.js文件
使其默认携带token去请求后台
修改request函数
getInsideConfig () {
const config = {
baseURL: this.baseUrl,
headers: {
'Authorization': Cookies.get('token') ? 'JWT' + ' '+ Cookies.get('token') : ' '
}
}
return config
}
request (options) {
const instance = axios.create()
options = Object.assign(this.getInsideConfig(), options)
this.interceptors(instance, options.url)
return instance(options)
}
就先这样吧, 我要去海拉鲁了