第一步:进入luffy虚拟环境安装django2.2版本
注意:千万别开代理,报错报错报错!
第二部:第二步:使用pycharm创建后台luffy项目,选择解释器
第三步就是目录调整
第三步,调整目录
1、新建setting
文件夹,把原来的settins.py配置文件改名为dev.py
,再copy一份,命名为pro.py
2、在manage.py 中指向的配置文件,改成自己修改后的配置文件路径
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.setting.dev')
3、设置国际化(可选)
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
4、启动项目
注意如果不能点击启动可以添加一个Django server
调整app的路径,以后把所有app都放到luffy_api下的apps文件夹下,这样更加整洁
1、创建项目
切换到apps路径下,执行创建app的命令
python ../../manage.py startapp user
注意:切换路径,不然找不到文件报错
PS E:\luffy_api\luffy_api\apps> python manage.py startapp user D:\Virtualenvs\luffy\Scripts\python.exe: can't open file 'manage.py': [Errno 2] No such file or directory
2、注册项目
原来在配置文件的INSTALLED_APPS
直接注册,现在直接注册找不到user模块(应用),需要配置
方式一:绝对路径注册
INSTALLED_APPS = [ 'luffy_api.apps.user', ]
方式二:apps路径添加到环境变量中(sys.path)
# 原来直接注册为什么不报错? 原来直接写app名字不报错,原因是app就在项目根路径下(模块的查找),由于项目的根路径在环境变量中,app就在根路径下,它能直接找到 # 现在为什么报错? 现在的问题是apps路径不在环境变量中,它就找不到 # 解决 把apps的路径加入到环境变量中,要在项目的启动时加,启动入口是配置文件
apps添加到环境变量
sys.path.append(os.path.join(BASE_DIR,'apps'))
以后再INSTALLED_APPS中只需要写app的名字即可
如果是测试阶段不修改也没问题,项目如果上线,使用uwsgi
上线,运行wsgi.py需要修改
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.setting.pro')
libs
文件夹:第三方类库utils
文件夹:公共文件logs
文件夹和scripts
文件夹:日志和测试脚本apps添加环境变量
应用(小luffy_api)加入环境变量,导入模块的时候,只要从环境变量的路径开始导就可以了,从luffy_api路径开始导入即可
'''dev.py''' # apps添加环境变量 sys.path.append(os.path.join(BASE_DIR,'apps')) # 小luffy_api添加到环境变量 sys.path.append(BASE_DIR)
注意:如果导入pycharm爆红,但是没有错,点右键,把该路径(在环境变量中的),做成source root
即可
注意
### 注意:以后导入包 -尽量用最短路径导入,如果从长路径导入--》路径经过的py文件都会去执行--》可能会导致循环导入的问题 -我个人推荐用相对导入 # from apps.user import models from . import models 推荐用这个 -py文件中有相对导入,这个py文件不能作为脚本运行 -django项目中,由于没有右键运行的脚本,所以都可以用相对导入
### 项目目录结构 """ ├── luffy_api ├── logs # 项目运行时/开发时日志目录 - 包 ├── luffy_api/ # 项目主应用,开发时的代码保存 - 包 ├── apps/ # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包 ├── libs/ # 第三方类库的保存目录[第三方组件、模块] - 包 ├── setting/ # 配置目录 - 包 ├── dev.py # 项目开发时的本地配置 └── prod.py # 项目上线时的运行配置 ├── urls.py # 总路由 ├── wsgi.py └── utils/ # 多个模块[子应用]的公共函数类库[自己开发的组件] ├── manage.py # 脚本文件 ├── templates # html文件 └── scripts/ # 保存项目运营时的脚本文件 - 文件夹 """
在配置文件中加入:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { # 实际开发建议使用WARNING 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { # 实际开发建议使用ERROR 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"), # 日志文件的最大值,这里我们设置300M 'maxBytes': 300 * 1024 * 1024, # 日志文件的数量,设置最大日志数量为10 'backupCount': 10, # 日志格式:详细格式 'formatter': 'verbose', # 文件内容编码 'encoding': 'utf-8' }, }, # 日志对象 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统 }, } } ### 在utils下简历logging.py import logging # 创造一个logger对象,使用的是配置文件中的django这个 logger = logging.getLogger('django') ## 以后使用,导入直接用,打印到控制台和记录到文件中 from utils.logging import logger logger.info("我执行了一下")
utils文件夹下创建excepiton.py
## 全局异常捕获 from rest_framework.views import exception_handler # 默认没有配置,出了异常会走它 from rest_framework.response import Response from utils.logging import logger def common_exception_handler(exc, context): res = exception_handler(exc, context) if res: res = Response(data={'code': 998, 'msg': res.data.get('detail', '服务器异常,请联系系统管理员')}) else: res = Response(data={'code': 999, 'msg': str(exc)}) request = context.get('request') view = context.get('view') logger.error('错误原因:%s,错误视图类:%s,请求地址:%s,请求方式:%s' % (str(exc), str(view), request.path, request.method)) return res
dev.py中
REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'utils.exception.common_exception_handler' # 再出异常,会执行这个函数 }