首页 > 其他分享 >luffy后台项目创建

luffy后台项目创建

时间:2023-10-08 22:13:23浏览次数:30  
标签:创建 py django luffy 后台 日志 logger

1. 项目创建

 1. 使用命令创建luffy项目

 2. 创建虚拟环境

  mkvirtualenv -p python310 luffy

 3. 安装django

  pip install django==3.1.12

 4. 命令创建项目

  django-admin startproject luffy_api

 5. pycharm创建

 2. 目录调整

"""
├── luffyapi
    ├── logs/                  # 项目运行时/开发时日志目录 - 包
    ├── manage.py              # 脚本文件
    ├── luffyapi/              # 项目主应用,开发时的代码保存 - 包
         ├── apps/             # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
        ├── libs/              # 第三方类库的保存目录[第三方组件、模块] - 包
        ├── settings/          # 配置目录 - 包
            ├── dev.py         # 项目开发时的本地配置
            └── prod.py        # 项目上线时的运行配置
        ├── urls.py            # 总路由
        └── utils/             # 多个模块[子应用]的公共函数类库[自己开发的组件]
    └── scripts/               # 保存项目运营时的脚本文件 - 文件夹
"""

1. 当调整好目录后,运行报错

  - 运行时,执行的是:python manage.py runserver

  -报错原因:django项目运行,要先加载:settings.py文件,我们将其改成了 dev.py,运行时找不到settings.py

2. 解决运行错误

  - 修改manage.py文件中的 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings')  ,修改如下:

    修改后:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')

  

  -命令行中运行,肯定不会报错

  -pycharm运行,可能会报错
  -删除之前的django-server,再创建一个,它会自动关联虚拟环境

  

  -如果还会报错,就在配置文件中,找到django,指定配置文件(如下图)

  

3. 创建app

  python manage.py startapp home   # 在哪执行,app就创建在哪

  切到apps目录下,创建app即可

  python ../../manage.py startapp home

  

4. 注册app

  - 在INSTALLED_APPS 直接写app的名字,会报错,报模块找不到的错误: No module named 'home'

    - 1. 模块就是没有

    - 2. 不在环境变量中

    - 3. 自己写了一个,跟模块名一样了

 - 只需要把apps路径加入到环境变量即可

  sys.path.insert(0,str(BASE_DIR))

  # 把apps文件夹加入环境变量,以后注册app,直接写名字即可

     sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

  

5. wsgi.py,asgi.py 配置文件也要改 ---》后面上线才用到

6. 验证现在配置文件用的是dev.py

from django.conf import settings
print(settings)  # luffy_api.settings.dev

  

 3. 封装logger

1. django 默认使用 python原生的日志模块,我们选择它

  - 以后不要在print输出了,都用日志输出

  - print输出,上线也会有输出,如果用日志,日志有级别,上线后把级别调高,开发阶段的输出就不在打印了

2. 可以使用第三 logru ,公司里可能会用

3. django中集成日志

  - 1.复制日志配置到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',  # 控制台只显示DEBUG以上,就是Info开始
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用ERROR
            'level': 'INFO', #文件中只显示INFO以上,从WARNING
            '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, # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

  

  - 2. 在utils下新建 common_logger.py    

import logging
logger = logging.getLogger('django')

  

 -3. 在想使用日志的位置,导入直接使用即可,日志有级别,控制台和文件中打印的日志级别是不一样的

 from utils.common_logger import logger
        class LoggerView(APIView):
            def get(self, request):
                # 以后不要再用print输出了,都用日志输出
                logger.info('info级别')
                logger.warn('warn级别')
                logger.warning('warning级别')
                logger.error('error级别')
                logger.critical('critical级别')
                logger.debug('debug级别')
                return Response('看到我了')

  

  路由配置:

  

4. 封装全局异常

1.写一个函数(只要走到这,程序出异常了----》记录日志 ---》越详细越好)

from rest_framework.views import exception_handler
from rest_framework.response import Response
from utils.common_logger import logger
def common_exception_handler(exc, context):
    res = exception_handler(exc, context)
    if res:  # 有值:drf的异常,处理了,格式不是咱们想要的
        err = res.data.get('detail') or res.data or '未知错误,请联系系统管理员'
        response = Response({'code': 888, 'msg': '请求异常-drf:%s' % err})
    else:  # 其他异常,没有处理,自己处理格式
        response = Response({'code': 999, 'msg': '请求异常-其他:%s' % str(exc)})
    # 记录日志,越详细越好,  请求错误:请求地址是:%s,请求方式是:%s,请求用户ip地址是:%s,错误是:%s,执行的视图函数是:%s
    request = context.get('request')
    path = request.get_full_path()
    method = request.method
    ip = request.META.get('REMOTE_ADDR')
    user_id = request.user.pk or '未登录用户'
    err = str(exc)
    view = str(context.get('view'))
    logger.error(
        '请求错误:请求地址是:%s,请求方式是:%s,请求用户ip地址是:%s,用户id是:%s,错误是:%s,执行的视图函数是:%s' % (
        path, method, ip, user_id, err, view))
    return response

2. 在配置文件中配置一下:

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.common_excepitons.common_exception_handler',
}

测试:drf异常:

在views中:

  

 结果:

5. 封装Response

之前使用drf的Response,我们需要自己构造返回字典

# 比如:
return Response(data={code:100,msg:成功,result:[{},{}]})
return Response(data={code:100,msg:成功,token:asdasd,username:lqz})

我们封装了APIResponse,以后使用,效果如下:

return APIResponse()---》{code:100,msg:成功}
return APIResponse(result=[{},{}])
return APIResponse(token=afasfd,username=lqz)

APIResponse:

6. 后台数据库创建

使用mysql作为数据库:

 - mysql在win上安装步骤:https://zhuanlan.zhihu.com/p/571585588

1. 创建数据库 ---- root 用户创建 ----》 后续使用代码操作数据库,不使用root用户,新建一个用户:luffy

  -如果使用root用户,一旦密码泄露,所有库都不安全了

  -如果新建一个luffy用户,只授予luffy库的权限,即便泄露了密码,只是这个库不安全了

2. 创建路飞用户,授予了luffy库所有表的所有权限

  - 查看用户:select user,host,authentication_string from mysql.user;

  - 创建用户:

  grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
  grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
  flush privileges;

3. 以后,操作luffy库,都用luffy用户登录,就不用root用户了

4. 项目中配置使用mysql数据库,使用luffy用户  

  DATABASES = {
  'default': {
  'ENGINE': 'django.db.backends.mysql',
  'NAME': 'luffy',
  'HOST': '127.0.0.1',
  'PORT': 3306,
  'USER': 'luffy',
  'PASSWORD': 'Luffy123?'
    }
  }

5. 运行会报错,因为没有装mysqlclient

  - 解决方式一:直接安装mysqlclient 

  - 解决方式二:使用pymysql

    - 安装,在配置文件中加入:

      import pymysql

      pymysql.install_as_MySQLdb()

6. 数据库的用户名,密码,都是直接写死在代码中的,如果代码泄露了,数据库也就被人看到了

  user=os.environ.get('LUFFY_USER','luffy')
  password=os.environ.get('LUFFY_PWD','Luffy123?')
  print(user)
  DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'luffy',
      'HOST': '127.0.0.1',
      'PORT': 3306,
      'USER': user,
      'PASSWORD': password
    }
  }

 

标签:创建,py,django,luffy,后台,日志,logger
From: https://www.cnblogs.com/Lucky-Hua/p/17750294.html

相关文章

  • 虚拟环境搭建,luffy后台项目创建、目录调整,封装logger,封装全局异常,封装Response,后台数
    1虚拟环境搭建......
  • 8、IDEA 创建新分支,合并代码
    转载自适用场景:当前分支是线上分支master,现在需要开发一个新功能,自然是要拉取一个新的分支test1,待开发测试完毕之后,再合并到master才比较恰当。当前处于master分支:现在新建一个分支test1(备注:此时newbranch是在当前所处分支上新建分支,比如处于A分支,然后newbranchB......
  • 创建Vue实例方式一(基于核心包)
    基于核心包创建Vue实例核心包就是Vue.jsvue2地址:https://v2.cn.vuejs.org/vue3地址:https://cn.vuejs.org/注意开发版本和生产版本,学习建议使用开发版本  ......
  • centos7系统中创建临时接口,使用jmeter进行http压测
    要在一台CentOS7服务器上使用JMeter进行HTTP接口的压测,首先需要在服务器上部署一个Web服务器,然后在其上部署您想要测试的接口。以下是一些简单的步骤来实现这一目标:步骤1:在CentOS7服务器上安装Web服务器您可以选择安装常用的Web服务器,比如Apache或Nginx。以下......
  • 创建数据库全量备份脚本
    创建用户账号和密码配置文件#创建一个backup的登录路径mysql_config_editorset--login-path=backup--host=localhost--user=username--password在上述命令中,将backup替换为适合您的环境和需求的登录路径名称,localhost、username和--password替换为实际的数据库主机......
  • 完整创建数据库,shell脚本
    #1.安装依赖[root@db03~]#yuminstall-yautoconflibaio-devel#1.解压[root@db02~]#tarxfmysql-5.6.50-linux-glibc2.12-x86_64.tar.gz#2.创建app目录[root@db02~]#mkdir/app#3.移动目录[root@db02~]#mv/root/mysql-5.6.50-linux-glibc2.12-x86_64/a......
  • 资源清单创建
    目录不同资源清单用---进行隔离命名空间peployment资源限制serviceingresshpa健康探针就绪探针http://k8s.driverzeng.com/v1.19/不同资源清单用---进行隔离---命名空间#资源清单创建apiVersion:"v1"kind:"Namespace"metadata:name:zls......
  • 【后台体验】运营后台订单详情设计分享
    目前大部分运营后台的设计和开发都是由后端同学来做,产品经理对界面标准要求并不高,大多数都是能用就行。其实,只要花些心思,运营后台也可以做的很美,提升运营同学的日常使用体验。下面跟大家分享两个我做的运营后台中的订单详情设计1.共享图书平台运营后台订单详情设计心路历程:产......
  • 【后台体验】运营后台订单详情设计分享 | 京东云技术团队
    目前大部分运营后台的设计和开发都是由后端同学来做,产品经理对界面标准要求并不高,大多数都是能用就行。其实,只要花些心思,运营后台也可以做的很美,提升运营同学的日常使用体验。下面跟大家分享两个我做的运营后台中的订单详情设计1.共享图书平台运营后台订单详情设计心路历程:产品经......
  • VS2019 创建Integration Service
    最近工作中需要用到Integrationservice,使用VS2022如何都打不开,查阅文档发现vs2022目前不支持,所以需要下载VS2019,安装步骤如下1、下载vs20192、在此窗口中,我们单击“扩展”>“管理扩展”: 3、在打开的窗口的搜索栏中,搜索“IntegrationServices”扩展名。从出现的列表中,我们......