2. 搭建DRF项目
企业项目开发流程
一.需求分析
1.企业的web项目类型:
商城
门户网站[企业站和门户站]
社交网络
资讯论坛
内部系统
个人博客
内容收费站
前端的静态页面制作,外界开发的时候,是照着psd/png设计稿进行切图布局。
2. 项目各页面功能分析
3.项目架构
项目采用前后端分离的应用模式
前端使用Vue.js vue-cli
后端使用Django REST framework
后台管理 xadmin
二.搭建DRF项目
一.创建项目的虚拟环境
mkvirtualenv luf

二.进入虚拟环境
workon luf
三.安装基本类库
在之前虚拟环境luf中安装项目需要用到的类库
pip install django pip install PymySQL pip install Pillow pip install djangorestframework

四.创建django项目
django-admin startproject luf

配置manage.py 项目启动文件

五.在pycharm中打开项目
提示:
在pycharm中如果要使用已经创建好的虚拟环境,则必须设置pycharm中的python解释器,设置为
虚拟环境中的python。
/.virtualenvs/环境名称/Scripts/python.exe

配置项目启动文件:manage.py

六.项目配置
1.项目目录调整

七.数据库
1.创建数据库
create database luf default charset=utf8;
2.为当前项目创建数据库用户[这个用户只能看到这个数据库]
# root 登录mysql数据库: create user luf_user identified by 'luf'; # 创建用户名和密码
#用户名 # 密码
grant all privileges on luf.* to 'luf_user'@'%'; # 给该用户分配权限,只能访问luf 库
库名
flush privileges; # mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问

3. 配置数据库连接
项目主应用 settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'luf',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'luf_user',
'PASSWORD':'luf'
}
}
在项目主模块的 __init__.py中导入pymysql
import pymysql pymysql.install_as_MySQLdb()
如果此时启动项目出现以下错误提示时:
出现错误 : Access denied for user 'luf_user'@'localhost' (using password: YES)

解决方案是:
用root 账号登录mysql数据库
select user,host from mysql.user # 执行这句的时候,出现了一个空用户,把空用户删掉,并刷新数据库就可以了。
删除空用户和刷新数据库
delete from mysql.user where user=''; flush privileges;

八 日志配置
django配置文件文档:https://docs.djangoproject.com/en/2.1/ref/settings/#databases
主应用 settings.py 中
# 日志配置
LOGGING = {
'version': 1,
# 是否禁用其他已经存在的日志功能,False表示不禁用
'disable_existing_loggers': False,
# 设置日志的输出格式
'formatters': {
# 详细版日志 levelname 表示错误等级
'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目录必须自己动手创建] # BASE_DIR 表示项目根目录
'filename': os.path.join(BASE_DIR, "logs/luf.log"),
# 日志文件的大小[字节],日志文件最大是300M
'maxBytes': 300 * 1024 * 1024,
# 日志备份数量是10个,超过会自动更新,只留下最新的10个
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'propagate': True,
},
}
} # drf框架的配置信息
REST_FRAMEWORK = {
# 异常处理
'EXCEPTION_HANDLER': 'luf.utils.exceptions.custom_exception_handler',
}
九.异常处理
1. 新建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
# python内置的日志管理器
import logging # 创建日志对象
logger = logging.Logger("luf") # 为luf项目创建日志对象 def custom_exception_handler(exc,context):
"""自定义异常处理
exc: 发生异常时的异常对象
context: 发生异常时的上下文环境
"""
response = exception_handler(exc,context) if response is None: # 当python 自带的异常处理没有处理错误时,就走到自定义的异常处理来
# 数据库错误异常捕获
view = context["view"]
if isinstance(exc,DatabaseError):
# 数据库出现异常了,通过日志的方式记录下来
logger.error('数据库报错了: [%s] %s' % (view, exc))
return Response("数据库报错了!请联系客服~",status=status.HTTP_507_INSUFFICIENT_STORAGE)
else:
return response
2. 在主应用 settings.py 中配置:
# drf框架的配置信息
REST_FRAMEWORK = {
# 异常处理
'EXCEPTION_HANDLER': 'luf.utils.exceptions.custom_exception_handler',
}
2. 搭建DRF项目的更多相关文章
- 四:DRF项目开发的准备
一: 虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就 ...
- 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...
- 零配置简单搭建SpringMVC 项目
SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...
- 关于使用ABP框架搭建的项目升级时需要注意的问题汇总
ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 说明 升级方法 问题_01:Log4Net导致编译不成功 2015/12/18更新 ...
- 3 分钟轻松搭建 Ruby 项目自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这是一篇关于 Ruby 项目持续集成的快速指导教程,教大家如何使用 f ...
- 【maven】 在 MyEcplise上使用maven搭建Web项目
二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目 2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置 4.新创建的项目结构如下 ...
- 手把手教你如何搭建iOS项目基本框架
手把手教你如何搭建iOS项目基本框架 今天我们来谈谈如何搭建框架,框架需要做一些什么. 第一步:找到我们的目标我们的目标是让其他开发人员拿到手后即可写页面,不再需要考虑其他的问题. 第二步:我们需要做 ...
- 搭建PhoneCat项目的开发与测试环境
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...
- 在vue-cli搭建的项目中增加后台mock接口
用vue-cli搭建一个前端开发环境确实是极其方便,在写前端代码肯定也是少不了需要调用后台提供的业务接口进行前后端交互,特别在敏捷开发中,前后端都要提前确定业务接口并进行打桩,在开发过程中基本是没有现 ...
随机推荐
- CentOS 源码编译安装 Python3
准备 yum -y install wget gcc make libffi-devel zlib-devel readline-devel bzip2-devel ncurses-devel sql ...
- HDU1285 确定比赛问题【拓扑排序+优先队列】
题目 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩, ...
- 【做题】spoj4060 A game with probability——dp
赛前做题时忽然发现自己概率博弈类dp很弱,心好慌.(获胜概率或最优解期望) 于是就做了这道题,续了特别久. 一开始列dp式子的时候就花了很长时间,首先搞错了两次,然后忘记了根据上一轮dp值直接确定选什 ...
- 快速理解Java中的七种单例模式
饿汉式(推荐) package concurencyv2.chapter1; public class SingletonV2 { private static final SingletonV2 i ...
- Bytom矿池接入协议指南
矿机配置 https://gist.github.com/HAOYUatHZ/a47400bde4a138825faef415387b532c 固件升级 https://service.bitmain ...
- log4j2打印Mybatis执行的SQL语句及SQL语句的执行时间
http://blog.csdn.net/zjq852533445/article/details/78320012
- 20165306 预备作业3 Linux安装及学习
查看了许多教程,VirtualBox和Ubuntu已安装完成.以下为学习Linux基础入门课程的实验报告.实验截图.尚未解决的问题及体会. 实验三 用户及文件权限管理 一.Linux用户管理 (一)查 ...
- Linux 命令之mv
mv命令也是Linux中很常见命令 作用:可以用来移动文件或者将文件改名 命令格式: mv [选项] 源文件或目录 目标文件或目录 命令参数: -b :若需覆盖文件,则覆盖前先行备份. -f :for ...
- Android之使用传感器获取相应数据
Android的大部分手机中都有传感器,传感器类型有方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: ...
- Python open 对应的参数