2. 搭建DRF项目

企业项目开发流程

一.需求分析

1.企业的web项目类型:

  1. 商城

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

  3. 社交网络

  4. 资讯论坛

  5. 内部系统

  6. 个人博客

  7. 内容收费站

前端的静态页面制作,外界开发的时候,是照着psd/png设计稿进行切图布局。

2. 项目各页面功能分析

3.项目架构

扫描二维码关注公众号,回复: 5609536 查看本文章
  • 项目采用前后端分离的应用模式

  • 前端使用Vue.js vue-cli

  • 后端使用Django REST framework

  • 后台管理 xadmin

二.搭建DRF项目

一.创建项目的虚拟环境

mkvirtualenv  luf

 

二.进入虚拟环境

workon  luf

 

三.安装基本类库

在之前虚拟环境luffy中安装项目需要用到的类库

pip install django

pip install PymySQL​

pip install Pillow​

pip install djangorestframework

 

四.创建django项目

django-admin startproject luffy

 

配置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/luffy.log"),
            # 日志文件的大小[字节],日志文件最大是300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志备份数量是10个,超过会自动更新,只留下最新的10个
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True,
        },
    }
}

# drf框架的配置信息
REST_FRAMEWORK = {
    # 异常处理
    'EXCEPTION_HANDLER': 'luffy.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("luffy") #  为luffy 项目创建日志对象

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': 'luffy.utils.exceptions.custom_exception_handler',
}

猜你喜欢

转载自www.cnblogs.com/knighterrant/p/10573417.html