Luffy之虚拟环境.项目搭建,目录日志等配置信息
1. 项目开发前
1.1 虚拟环境virtualenv
如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.而公司里面往往会存在多个项目的情况,所以需要使用虚拟环境,把当前项目所需要用到的模块及其版本进行隔离包装到一个虚拟环境中使用。
1.1.1 安装
pip install virtualenv
pip install virtualenv-clone
pip install virtualenvwrapper
pip install virtualenvwrapper-win # 注意以上命令适用于window系统
Linux和Mac下安装配置
安装虚拟环境的命令 : sudo pip install virtualenv
sudo pip install virtualenvwrapper 安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量: # 1、创建目录用来存放虚拟环境
mkdir
$HOME/.virtualenvs # 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh # 3、运行
source ~/.bashrc
1.1.2 常用命令
创建虚拟环境: 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.2 企业项目开发流程
企业的web项目类型:
商城
门户网站[企业站和门户站]
社交网络
资讯论坛
内部系统
个人博客
内容收费站
项目流程:
1.3需求分析
1.4 项目架构
项目采用前后端分离的应用模式
前端使用Vue.js vue-cli
后端使用Django REST framework
2. 搭建DRF项目
进入虚拟环境
workon luffy
安装基本类库
在之前虚拟环境luffy中安装项目需要用到的类库
pip install django pip install PymySQL pip install Pillow pip install djangorestframework
创建django项目
django-admin startproject luffy
提示:
在pycharm中如果要使用已经创建好的虚拟环境,则必须设置pycharm中的python解释器,设置为
虚拟环境中的python。
/.virtualenvs/环境名称/Scripts/python.exe
如下图:
坑:注意
1. 安装了虚拟环境以后,无法使用deactivate退出环境,并且使用pip list输出的当前环境模块是全局环境中的.
问题出现的原因: 当前系统中,登录用户的家目录是中文的!
防范类似的问题出现: 安装的软件\项目开发使用到的路径\开发相关的目录不要涉及到中文
3. 项目配置
3.1 项目目录调整
├── docs # 项目相关资料保存目录
├── logs # 项目运行时/开发时日志目录
├── manage.py
├── luffy # 开发时的代码保存
│ ├── apps # 开发者的代码保存目录,以模块[子应用]为目录保存
│ ├── libs # 第三方类库的保存目录
│ ├── settings.py
│ ├── urls.py
│ ├── utils # 多个模块[子应用]的公共函数类库
└── scripts # 保存项目运营时的脚本文件
3.2 创建数据库
create database luffycity default charset=utf8;
为当前项目创建数据库用户[这个用户只能看到这个数据库]
MySQL添加新用户、为用户创建数据库、为新用户分配权限
详细教程请看:
1.https://blog.csdn.net/weixin_38091140/article/details/82983229(较详细,图文演示)
2.https://blog.csdn.net/piaocoder/article/details/53704126(基本命令)
坑:注意的地方
数据创建的账号无法登陆,原来的root账号没有问题,创建账号的sql语句没有问题.
错误发生的原因:在安装mysql的时候,没有进行初始化[没有删除匿名用户]
防范出现这个问题:以后安装了mysql以后,进入到mysql的控制台,找到mysql数据库的user表,把user=''的用户删除
相关操作语句:
delete from mysql.user where user=''
注意,如果在删除匿名用户之前已经创建的用户,这些用户是无法登陆,这些用户也需要删除
删除了用户以后,还要从权限中移除上面账号的相关权限记录
drop user '无法登陆的用户名'; # 匿名用户无需进行这项操作
flush privileges; # 刷新mysql的权限记录,保证上面更改立马刷新
3.3 配置数据库连接
打开settings/dev.py文件,并配置
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"HOST": "127.0.0.1",
"PORT": 3306,
"USER": "luffy_user",
"PASSWORD": "luffy",
"NAME": "luffycity",
}
}
在项目主模块的 __init__.py
中导入pymysql
import pymysql pymysql.install_as_MySQLdb()
3.4 日志配置
在settings.py文件中追加如下配置:
# 日志配置
LOGGING = {
'version': 1,
# 是否禁用其他已经存在的日志功能,False表示不禁用
'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',
# 存储日志的目录地址和文件名[logs目录必须自己动手创建]
'filename': os.path.join(BASE_DIR, "logs/luffy.log"),
# 日志文件的大小[字节],日志文件最大是300M
'maxBytes': 300 * 1024 * 1024,
# 日志备份数量是10个
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'propagate': True,
},
}
}
3.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': 'luffy.utils.exceptions.custom_exception_handler',
}
Luffy之虚拟环境.项目搭建,目录日志等配置信息的更多相关文章
- mate-desktop安装在其他目录时一些配置信息
1.mate-desktop安装在其他目录时一些配置信息 2.BIN目录下添加相应的mate-session_gtk2/3 3.首先配置如下环境变量 #!/bin/sh if [[ "${E ...
- Web自动化测试项目搭建目录
Web自动化测试项目搭建(一) 需求与设计 Web自动化测试项目(二)BasePage实现 Web自动化测试项目(三)用例的组织与运行 Web自动化测试项目(四)测试报告 Web自动化测试项目(五)测 ...
- 【原创】Spring MVC项目搭建(使用Java配置)
一.使用Intellij idea,新建maven项目,选择maven-archetype-webapp. 二.在src/main下新建文件夹,命名为java,并标注为source folder. 三 ...
- maven 项目搭建,本地环境配置。
一,下载地址 http://maven.apache.org/download.cgi 英文不好的,可以在浏览器下载个翻译的插件,就好了,我用的是谷歌. 二, 解压文件,安装在自己制定的目录,注意安装 ...
- vue3.0+vite+ts项目搭建--vite.config.ts配置(三)
vite.config.ts配置 配置路径处理模块 安装ts的类型声明文件 yarn add @types/node -D 通过配置alias来定义路径的别名 resolve: { alias: { ...
- Log4net 日志记录配置信息
<log4net> <!--配置日志的级别,低于此级别的就不写到日志里面去 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL --> <ro ...
- 商铺项目(使用DES加密配置信息)
package com.ouyan.o2o.util; import java.security.Key; import java.security.SecureRandom; import java ...
- Log4net快速配置使用指南。(快速搭建log4net日志平台手册)
每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...
- 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤
简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...
随机推荐
- 枚举+排序|神奇算式|2014年蓝桥杯A组题解析第三题-fishers
标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求. ...
- js字符串方法、数组方法整理
push 向数组末尾添加一项 返回值为数组的长度: pop 删除数组最后一项: unshift 向数组开头增加一项: shift 删除数组第一项: splice 删除数组中的值:1 splice(n, ...
- Spring Cloud各组件超时总结
Ribbon的超时 全局设置: ribbon: ReadTimeout: 60000 ConnectTimeout: 60000 1 2 3 局部设置: service-id: ribbon: Rea ...
- [0413] FFTSHIFT的四种写法
FFTSHIFT的四种写法 前言 matlab说,"你读过书,--我便考你一考.fftshift的函数,怎样写的?"我想,讨饭一样的人,也配考我么?便回过脸去,不再理会.matla ...
- Linux命令去重统计排序
利用Linux命令进行文本按行去重并按重复次数排序 linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去 ...
- SyncDictionary
using System; using System.Collections; using System.Collections.Generic; using System.Threading; us ...
- Oracel中的NVL函数
Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...
- java转义字符处理——“\\”替换为“/”
replaceAll("\\\\", "/"); 例如 //获取项目路径,并将\转换为/ File directory = new File("&qu ...
- try catch对Spring事务的影响
一.Spring 的默认事务机制,当出现unchecked异常时候回滚,checked异常的时候不会回滚. 异常中unchecked异常包括error和runtime异常.需要try catch或向上 ...
- HDU 1241 连通块问题(DFS入门题)
Input The input file contains one or more grids. Each grid begins with a line containing m and n, th ...