zoukankan      html  css  js  c++  java
  • 2. 搭建DRF项目

    企业项目开发流程

    一.需求分析

    1.企业的web项目类型:

    1. 商城

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

    3. 社交网络

    4. 资讯论坛

    5. 内部系统

    6. 个人博客

    7. 内容收费站

    前端的静态页面制作,外界开发的时候,是照着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',
    }
  • 相关阅读:
    Java SE 基础之接口回顾
    读书杂谈-《架构探险:从零开始写Java Web框架》
    Java Se之类加载问题思考
    struts2 下载记录
    《重构改善既有代码的设计》笔记之序
    Luence简单实现2
    RabbitMQ学习(1):安装
    jquery插件dataTables添加序号列
    父<IFRAME>获取子页属性以及子页中<IFRAME>的方法
    类的约束 异常处理 自定义异常 MD5 日志信息处理
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10573417.html
Copyright © 2011-2022 走看看