一.
pip install virtualenv
pip install virtualenv-clone
pip install virtualenvwrapper
pip install virtualenvwrapper-win
#以上四步依次安装下来
创建虚拟环境: mkvirtualenv 虚拟环境名称
创建虚拟环境(指定python版本): mkvirtualenv -p python 虚拟环境名称
查看所有虚拟环境: workon+2次tab键
使用虚拟环境: workon 虚拟环境名称
退出虚拟环境: deactivate
删除虚拟环境(必须先退出虚拟环境内部才能删除当前虚拟环境):
rmvirtualenv 虚拟环境名称 其他相关命令: 查看虚拟环境中安装的包: pip freeze 或者 pip list 收集当前环境中安装的包及其版本: pip freeze > requirements.txt 在部署项目的服务器中安装项目使用的模块: pip install -r requirements.txt
提示:
-
虚拟环境只会管理环境内部的模块和python解析器,对于源代码是毫无关系
-
创建虚拟环境需要联网
-
创建成功后, 会自动工作在这个虚拟环境上
-
工作在虚拟环境上, 提示符最前面会出现 “(虚拟环境名称)”
二.搭建项目之虚拟环境配置
1.进入虚拟环境
workon 虚拟环境名称
2.在虚拟环境中安装我们需要的模块
pip install django
pip install PymySQL
pip install Pillow
pip install djangorestframework
3.
1.先进入项目要保存的目录
2.django-admin startproject luffy
#注意:最好带虚拟环境
4.打开项目,为项目其配置环境
1.找到设置
2.为其配置解释器(选择后面的add local来选择虚拟环境中的解释器,而不再是系统中安装的python解释器了)
3.选择existing enviroment(选择已存在的环境)
4.第3步的...点击之后会跳出窗口,我们再去选择我们锁需要的虚拟环境中的python解释器
5.回到第一步,配置我们新增的解释器为当前项目的解释器
三.项目配置
1. 目录结构
├── docs # 项目相关资料保存目录 ├── logs # 项目运行时/开发时日志目录 ├── manage.py ├── luffy # 开发时的代码保存 │ ├── apps # 开发者的代码保存目录,以模块[子应用]为目录保存 │ ├── libs # 第三方类库的保存目录 │ ├── settings.py │ ├── urls.py │ ├── utils # 多个模块[子应用]的公共函数类库 └── scripts # 保存项目运营时的脚本文件
2.创建数据库
#创建数据库
create database luffycity default charset=utf8;
#为当前项目创建数据库用户和密码[这个用户只能看到这个数据库]
#把数据库权限开放给这个用户
#刷新数据库
create user luffy_user identified by 'luffy';
grant all privileges on luffycity.* to 'luffy_user'@'%';
flush privileges;
注意:这边 有个注意点就是:
如果你的mysql之前没有配置过,直接通过mysql就可以直接进入的情况下,你就需要把这种情况禁止,否则沪报错:
处理:
mysql>use mysql;
mysql>delete from user where user=”;
mysql>flush privileges; (必须的)
3.配置连接数据库
打开settings.py追加
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "HOST": "127.0.0.1", "PORT": 3306, "USER": "luffy_user", "PASSWORD": "luffy", "NAME": "luffycity", } }
import pymysql pymysql.install_as_MySQLdb()
4.
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': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(BASE_DIR, "logs/lufei.log"), 'maxBytes': 300 * 1024 * 1024, #300MB 'backupCount': 10, #最多是个文件 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, } }
5.异常处理
新建utils/exceptions.py(看第一点的目录结构)
from rest_framework.views import exception_handler from django.db import DatabaseError from rest_framework.response import Response from rest_framework import status import logging logger = logging.getLogger('luffy') def custom_exception_handler(exc, context): """ 自定义异常处理 :param exc: 异常类 :param context: 抛出异常的上下文 :return: Response响应对象 """ # 调用drf框架原生的异常处理方法 response = exception_handler(exc, context) if response is None: view = context['view'] if isinstance(exc, DatabaseError): # 数据库异常 logger.error('[%s] %s' % (view, exc)) response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) return response
settings.py
REST_FRAMEWORK = { # 异常处理 'EXCEPTION_HANDLER': 'lufei.utils.exceptions.custom_exception_handler', }
6.创建主页应用(把应用都创建在apps中)
python ../../manage.py startapp home