文章目录

  • 一、配置之封装Logger
  • 二、配置之封装全局异常
  • 三、后台配置之二次封装Response
  • 四、数据库配置
  • 五、User模块User表配置
  • 六、开放Media访问
  • 七、路飞前端项目创建配置
    • 1)安装Axios
    • 2)安装Elementui
    • 3)安装Vue-cookies

一、配置之封装Logger

每个项目都需要记录日志 后期可以通过日志排查问题分析错误

settings/dev.py

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/common_logger.py

import logging
logger = logging.getLogger('django')后期可以直接通过导入模块
from utils.common_logger import logger
logger.warning('测试来啦!!')        // 日志分为几个等级

二、配置之封装全局异常

封装全局异常就是想让异常返回的格式变成统一一个格式drf处理全局异常只需要写一个函数

utils/exceptions.py

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from utils.common_logger import loggerdef exception_handler(exc, context):      # 程序走到这里都说明出现了异常 request = context.get('request')        # 获取用户信息 方便后面日志记录try:user_id = request.user.pkif not user_id:user_id = '匿名用户'except:user_id = '匿名用户'view = context.get('view')logger.error('用户:[%s], 使用:[%s]请求,请求:[%s]地址,视图函数是[%s],出现错误:[%s]' % (user_id, request.method, request.get_full_path(), str(view), str(exc)))res = drf_exception_handler(exc, context)        # 如果res有值就是drf的异常 如果结果是None 那就是django的异常if res:     # drf异常res = Response(data={'code': 100, 'msg': res.data.get('detail', '服务器出错,请联系系统管理员')})else:res = Response(data={'code': 101, 'msg': str(exc)})return res

settings/dev配置文件中配置

REST_FRAMEWORK = {          # drf异常执行'EXCEPTION_HANDLER': 'utils.exceptions.exception_handler',
}

三、后台配置之二次封装Response

drf提供了Response对象 不是很方便添加code和msg字段 自己封装一个Response类 以后都用自己封装的

utils/response.py

from rest_framework.response import Responseclass APIResponse(Response):def __init__(self, code=100, msg='Success', status=None, headers=None, **kwargs):data = {'code': code, 'msg': msg}if kwargs:data.update(kwargs)super().__init__(data=data, status=status, headers=headers)

后面需要使用则在视图类中导入使用即可

from utils.response import APIResponsereturn APIResponse(token='asfdasfd')
return APIResponse(token='asfdasfd',status=201,code=101)

四、数据库配置

  1. 链接mysql 创建数据库luffy

  2. 创建用户luffy_api(普通用户)

  3. 把luffy库下所有的表权限都授予luffy_api用户 允许远程链接 本地连接

    • CREATE USER ‘luffy_api’@‘%’ IDENTIFIED BY ‘Luffy123?’;
    • GRANT ALL PRIVILEGES ON luffy.* TO “luffy_api”@“localhost”;
  4. 刷新权限列表 flush privileges;

  5. 查看用户权限 select user, host from mysql.user;

在项目配置中设置mysql数据库

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'luffy','USER': 'luffy_api','PASSWORD': 'Luffy123?','HOST': '127.0.0.1','PORT': 3306,}
}
  1. 项目运行报错 需要安装模块 mysqlclient(看运气)
  2. 如果安装不了mysqlclient那就安装pymysql–pymysql.install_as_MySQLdb()

为了防止数据库密码泄露 可以将用户名和密码存放在环境变量中存放 可以通过os.environ.get(‘USER’)获取

import osUser = os.environ.get('USER', 'luffy_api')     // 如果没有则以luffy_api为准
Password = os.environ.get('PASSWORD', 'Luffy123?')DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'luffy','USER': 'User','PASSWORD': 'Password','HOST': '127.0.0.1','PORT': 3306,}
}

五、User模块User表配置

  1. 创建一个app python …/…/manage.py startapp user
  2. 在user的app中的model.py中扩写admin用户表格
from django.db import models
from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):mobile = models.CharField(max_length=11, unique=True)icon = models.ImageField(upload_to='icon', default='icon/default.png')  # 需要pillow包的支持class Meta:db_table = 'luffy_user'verbose_name = '用户表'verbose_name_plural = verbose_namedef __str__(self):return self.username
  1. 配置文件中配置 注册app 安装pillow模块
AUTH_USER_MODEL='user.UserInfo'
  1. 两条命令迁移
python manage.py makemigrations
python manage.py migrate

六、开放Media访问

  1. 在配置文件中配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. 新建media文件夹 子文件夹icon文件夹 放一张默认照片里面
  2. 在路由中添加开启访问路径
from django.views.static import serve
path('media/<path:path>', serve, kwargs={'document_root': settings.dev.MEDIA_ROOT}),

七、路飞前端项目创建配置

  1. 创建Vue2-babel-router-vuex
  2. 打开文件 删除不必要的文件 成最后的文件
    app.vue
<template><div id="app"><router-view/></div>
</template>

homeview.vue

<template><div class="home"><h1>首页</h1></div>
</template><script>
export default {name: 'HomeView',
}
</script>

router.index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},
]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes
})export default router

1)安装Axios

安装Axios

npm install axios

在main.js中配置

import axios from 'axios'
Vue.prototype.$axios=axios
// axios配置 配置完在任意组件中直接使用 this.$axios

模拟使用

created(){this.$axios.get('http://127.0.0.1:8000/testview').then(res =>{console.log(res)})},

2)安装Elementui

安装Elementui

npm i element-ui -S                  //// Vue2安装这个
npm install element-plus --save    //// Vue3安装这个

在main.js中配置

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'Vue.use(ElementUI)

模拟使用

<template><el-input-number v-model="num" @change="handleChange" :min="1" :max="10" label="描述文字"></el-input-number>
</template>
<script>export default {data() {return {num: 1};},methods: {handleChange(value) {console.log(value);}}};
</script>

3)安装Vue-cookies

安装Vue-cookies

npm install vue-cookies -S

在main.js中配置

import cookies from 'vue-cookies'
Vue.prototype.$cookies=cookies

模拟使用

  created() {this.$cookies.set('name', 'like')},

路飞项目整体流程(二)相关推荐

  1. 路飞项目整体流程(五)

    目录标题 一.登录注册模态框分析 二.登录注册前端页面 三.腾讯短信功能二次封装 四.短信验证码接口 五.短信登录注册接口 六.登录前端 七.注册前端 一.登录注册模态框分析 Login.vue &l ...

  2. Luffy项目整体流程(一)

    文章目录 一.企业项目类型 二.企业项目开发流程 三.路飞项目需求 四.PiP换源 五.虚拟环境搭建 六.Luffy后台创建目录 一.企业项目类型 商城 B2C 直销商城 商家与会员直接交易 ( Bu ...

  3. 项目整体流程及各阶段主要任务

    项目整体具体划分为: 计划--分析--设计--开发--验证--布署 计划阶段主要任务: - 售前知识转移 - 项目启动会 - 定义项目的目的和范围 - 分配项目角色,资源和风险分析 - 制定整体项目时 ...

  4. Java -- 软件开发整体流程;项目环境dev,test,staging,prod

    软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工.职责, 并了解软件开发中涉及到的四种软件环境.我们将从 软件开发流程 ...

  5. + 网站项目计划书 (二):网站项目建设流程概述

    网站项目建设流程概述 一.概念 网站项目管理就是根据特定的规范.在预算范围内.按时完成的网站开发任务. 二.需求分析 项目立项 我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论 ...

  6. 二、Netty服务端/客户端启动整体流程

    一.综述 Netty 的整体流程相对来说还是比较复杂的,初学者往往会被绕晕.所以这里总结了一下整体的流程,从而对 Netty 的整体服务流程有一个大致的了解.从功能上,流程可以分为服务启动.建立连接. ...

  7. 【实时数仓】热度关键词接口、项目整体部署流程

    文章目录 一 热度关键词接口 1 Sugar配置 (1)图表配置 (2)接口地址 (3)数据格式 (4)执行SQL 2 数据接口实现 (1)创建关键词统计实体类 (2)Mapper层:创建Keywor ...

  8. DC入门教程(二)——综合的整体流程

    DC综合的整体流程(Global View) 1.准备好工艺库,HDL代码,约束文件. 2.启动环境的配置,主要是三大库的配置,target link symbel library. 3.读入设计,是 ...

  9. 软考-信息系统项目管理师-项目整体管理

    目录 4.1.项目整体管理概述 一.项目整体管理概念 二.项目整体管理的6个过程(掌握) 三.项目经理是整合者(掌握) 4.2.项目整体管理实现过程 一.项目整体管理-制定项目章程(掌握) 二.项目章 ...

最新文章

  1. 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素
  2. 普平数据招聘:数据中心建设项目经理(工程部 )2人
  3. linux到不了启动界面,Linux 界面不能启动的解决
  4. ES6-9 对象密封4种方式、assign、取值函数的拷贝
  5. 在vscode使用editorconfig的正确姿势
  6. 用户密码到底要怎样存储?
  7. 一文了解linux内核,一文了解Linux的系统结构
  8. 数据库小结2--提升
  9. 基于Packet Tracer的校园网设计与仿真 文档+答辩PPT+配置文件
  10. VS 201x C++ 编译错误解决方法集
  11. 使用代理服务器哪些风险?
  12. 窗口函数preceding和following字段
  13. linux系统设置自动拨号上网
  14. 保险公司需要中台吗?
  15. Centos系统mysql 忘记root用户的密码
  16. 狂肝数天,万字文章带你保姆级重识c语言(一篇足以)
  17. 深度学习之昆虫种类识别
  18. P1339 [USACO09OCT]热浪Heat Wave(最短路水题)
  19. 2019年TI杯 简易电路特性测试仪 制作过程(4)——程序总体分析 20/04/20
  20. IOS企业版app部署到自己服务器,不通过AppStore,在iOS设备上直接安装应用程序

热门文章

  1. android Qwerty 键盘搜索联系人分析与实现(支持多音字)
  2. ai竞赛--场景识别
  3. Unity3d shader内置矩阵
  4. idea maven parent飘红
  5. 一个Android开发者自学Python的心路历程
  6. 【计算机毕业设计】015健身房管理系统设计与实现
  7. 测试人员如何区分前端和后台BUG方法流程
  8. cocos2d-x中使用CCSprite拼接有缝隙
  9. Kali Linux查看信息
  10. Kali Linxu中打开Apache服务