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搭建一个前端开发环境确实是极其方便,在写前端代码肯定也是少不了需要调用后台提供的业务接口进行前后端交互,特别在敏捷开发中,前后端都要提前确定业务接口并进行打桩,在开发过程中基本是没有现 ...
随机推荐
- 如何在gvim中安装autoproto自动显示函数原型
cankao: http://www.vim.org/scripts/script.php?script_id=1553 注意, 在gvim中执行的命令, :foo和:!foo 的区别, 跟vim一样 ...
- P4556 [Vani有约会]雨天的尾巴
目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...
- 前缀判断|2013年蓝桥杯B组题解析第五题-fishers
前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 &quo ...
- 【做题】51NOD1753 相似子串——哈希
题意:两个字符串相似定义为: 1.两个字符串长度相等 2.两个字符串对应位置上至多有一个位置所对应的字符不相同 给定一个字符串\(s\),\(T\)次询问两个子串在给定的规则下是否相似.给定的规则指每 ...
- Download and Installation of Kibana
下载以及安装 https://www.elastic.co/downloads/kibana 1.Download and unzip Kibana 2. Open config/kibana.yml ...
- What are the differences between Flyweight and Object Pool patterns?
What are the differences between Flyweight and Object Pool patterns? They differ in the way they are ...
- office完全卸载
第一步:先暂停office服务,再通过 控制面板--卸载程序 --卸载office应用 第二步:通过office_move(自己命名的工具)软件卸载 工具分享:https://pan.baidu. ...
- 论文笔记:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
Show, Attend and Tell: Neural Image Caption Generation with Visual Attention 2018-08-10 10:15:06 Pap ...
- kubernetes 实战2_命令_Configure Pods and Containers
--以yaml格式输出:pod\configmap\service\ingress\deployment kubectl get pod platform-financeapi-deployment- ...
- Katana的WebAPI集成Swagger 解决方案
这位大哥写的博客很清楚了,我就不重复了. http://www.cnblogs.com/caodaiming/p/4156476.html 错误解决 http://blog.csdn.net/gold ...