Luffy之虚拟环境.项目搭建,目录日志等配置信息

时间:2022-12-22 20:27:26

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. 商城

  2. 门户网站[企业站和门户站]

  3. 社交网络

  4. 资讯论坛

  5. 内部系统

  6. 个人博客

  7. 内容收费站

项目流程:

Luffy之虚拟环境.项目搭建,目录日志等配置信息

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

如下图:

Luffy之虚拟环境.项目搭建,目录日志等配置信息

坑:注意

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之虚拟环境.项目搭建,目录日志等配置信息的更多相关文章

  1. mate-desktop安装在其他目录时一些配置信息

    1.mate-desktop安装在其他目录时一些配置信息 2.BIN目录下添加相应的mate-session_gtk2/3 3.首先配置如下环境变量 #!/bin/sh if [[ "${E ...

  2. Web自动化测试项目搭建目录

    Web自动化测试项目搭建(一) 需求与设计 Web自动化测试项目(二)BasePage实现 Web自动化测试项目(三)用例的组织与运行 Web自动化测试项目(四)测试报告 Web自动化测试项目(五)测 ...

  3. 【原创】Spring MVC项目搭建(使用Java配置)

    一.使用Intellij idea,新建maven项目,选择maven-archetype-webapp. 二.在src/main下新建文件夹,命名为java,并标注为source folder. 三 ...

  4. maven 项目搭建,本地环境配置。

    一,下载地址 http://maven.apache.org/download.cgi 英文不好的,可以在浏览器下载个翻译的插件,就好了,我用的是谷歌. 二, 解压文件,安装在自己制定的目录,注意安装 ...

  5. vue3.0+vite+ts项目搭建--vite.config.ts配置(三)

    vite.config.ts配置 配置路径处理模块 安装ts的类型声明文件 yarn add @types/node -D 通过配置alias来定义路径的别名 resolve: { alias: { ...

  6. Log4net 日志记录配置信息

    <log4net> <!--配置日志的级别,低于此级别的就不写到日志里面去 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL --> <ro ...

  7. 商铺项目(使用DES加密配置信息)

    package com.ouyan.o2o.util; import java.security.Key; import java.security.SecureRandom; import java ...

  8. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)

    每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...

  9. 《Asp&period;Net Core3 &plus; Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...

随机推荐

  1. JQuery设置时间段下拉选择 时间下拉选择

    $(document).ready(function() { var arrT = []; var tt = "{0}:{1}"; for (var i = 0; i < 2 ...

  2. 在linux的shell里访问一个URL

    在linux*问一个网址有四种方法 1.elinks,用法举例: [weishusheng@centOS6 ~]$ elinks -dump http://www.baidu.com 2. wget ...

  3. http响应Last-Modified和ETag&lpar;转&rpar;

    基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期 ...

  4. jdom学习&colon;读取xml文件

    用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...

  5. MVC4 EF linq从客户端中检测到有潜在的危险的Request&period;Path值

    今天做项目的时候遇到了这样的问题贴出来给大家分享下啦, 使用MVC4 EF linq跳转视图的时候出现,从客户端中检测到有潜在的危险的Request.Path值错误,如下图所示: 解决办法如下:  r ...

  6. mac 常用的开发工具

    http://www.oschina.net/news/53946/mac-dev-tools 要清楚的认识到,我们寻找的不是开始按钮,而是程序入口,任何一个操作系统,用户要做的事情并不是找到开始菜单 ...

  7. QuartusII 中采用门级原语

    QuartusII  中采用门级原语 默认的是前面第一个 为output  后面所有信号为输入 图中的工程实现的是 一个二选一多路选择器

  8. 在vue中如何动态修改title标签的值

    建议用vue-wechat-title插件为微信动态设置标题 1,首先安装插件 cnpm install vue-wechat-title --save 2,在main.js中引入 Vue.use(r ...

  9. &period;Net高级技术——字符串拘留池&lpar;Intern&rpar;

    一.深入理解字符串的不可变特性 string可以看做是char的只读数组.char c = s[1] C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变.所以只能通过索引来读取指定位 ...

  10. &lbrack;原&rsqb;&lbrack;osg&rsqb;&lbrack;osgearth&rsqb;我眼中的osgearth

    看了一下,OE生成的可执行文件 除了osg库和第三方库 OE生产最多的dll就是 osgdb_osgearth_XXXX.dll了 这些都是为了通过osgDB机制加载earth的数据用的. 所以,我觉 ...