首页 > 其他分享 >luffy_02days

luffy_02days

时间:2024-01-18 15:47:51浏览次数:23  
标签:py luffy --- 02days user import path

前倾回顾

# 1 vue3 ref
    -放在组件上 ref='myhello'
    -在父组件中取  const myhello=ref()
    -myhello.value.属性/方法
    -在子组件上要暴露
# 2 vue3 toRefs 和toRef
    -person=reactive({name:lqz,age:19})
    -let {name,age}=toRefs(person)
    -let name =toRef(person,'name')
    
    return {...toRefs(person)}
    return{name:ref(name),age:ref(age)}

# 3 axios 发送请求
    -普通使用:安装  ,导入使用
        const filmList=reactive({result:[]})
        axios.get().then()
        async function load(){
            let response=await axios.get('')
            filmList.result=response.data.results
        }
    -对axios封装:
        -请求发出去之前
        -响应回来以后
        
######  封装示例
import axios from "axios";
axios.defaults.baseURL = "http://127.0.0.1:8001/api/v1"
const request = axios.create({
    timeout: 5000,
    headers: {
        'Content-Type': "application/json; charset=utf-8"
    }
})
# 请求拦截器--》每次发送请求,请求头都会带:Authorization
request.interceptors.request.use(config => {
    config.headers['Authorization'] = localStorage.getItem("token")
    return config
})
# 响应拦截器
request.interceptors.response.use(
    response => {
        console.log("response ->" + response)
        let res = response.data # 真正响应头
        if (res.code === 100) { #自己定制的状态码
            return response.data
        } else {
            Element.Message.error('系统异常,请联系系统管理员')
            return Promise.reject(response.data.msg)
        }
    }
)
# 把对象导出
export default request

## main.js 
import http from './lib/http'
Vue.prototype.$http = http
#### 在某些组件中使用
 this.$http.get("/user/user/", {
        params: { # get请求参数
          username: this.searchForm.username,
          page: this.page,
          size: this.size
        }
      }).then(res => {
        this.tableData = res.results
        this.total = res.count
      })
    }
    
    
    
# 4 禅道---》项目管理软件
# 5 pip 换源
# 6 虚拟环境
    -以后每个项目使用独立的一个虚拟环境
    -1 装两个模块
    -2 配置环境变量:
        -key:value
        -path:xxx;sss;ss;  以后只要在这些路径下的命令
            可以在cmd的任意位置敲命令都有响应
    -3 运行bat文件---》bat(批处理--》vb脚本),exe(可执行文件) win上的可执行文件
    -4 使用命令创建:mkvirtualenv -p python39 虚拟环境名称
        -机器上装了
            python3.9:python  python39    pip pip39
            python3.10:python  python310   pip pip310
            python2.7:python  python2      pip pip2
            
       -创建了虚拟环境:系统环境里有 python3.8  和 python3.9
        -创建了虚拟环境:进入虚拟环境有标签
            python  pip  ---》虚拟环境的
            python3.8---》系统的python3.8
            
   -5 命令:
    mkvirtualenv -p python3 虚拟环境名称
    workon 虚拟环境名字
    deactivate
    
  -6 pycharm中指定某个虚拟环境
    -增加一个本地环境--》python.exe--->
    
# 7 创建后台项目
    -在创建项目的python环境中,一定要先指定版本装django===》否则会装最新
    -虚拟环境已经创建了,不用在pycharm中二次创建了,直接指定即可

今日内容

后端项目目录调整

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


### 2 创建app,需要来到apps目录下--->以后创建的app,就在apps目录下了
cd luffy_api/apps
python ../../manage.py startapp user


### 3 注册app
    -我们想,创建了app,以后只要在配置文件中注册app名字即可
    -需要把 apps目录,加入环境变量
    -sys.path 加入
   # 在settings中加入 
    
    import sys
    import os
    path = os.path.join(BASE_DIR, 'luffy_api', 'apps')
    sys.path.insert(0, path)
    print(sys.path)
    
    
    
### 4 把配置文件放到了settings下,命名为dev.py
    -运行项目跑不起来了---》原因是--》项目运行,需要先找到配置文件,现在找不到了
    -修改 manage.py 内的代码
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')
    -以后项目上线,不是使用manage.py 跑,而使用wsig.py 跑,现在先改好【目前用不到】
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.pro')
    -asgi.py 也改好【目前用不到】
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.pro')
    
    
    
## 5 配置文件改了路径,BASE_DIR也就跟着变了,不是项目根路径了,修改如下
from pathlib import Path
import sys
import os

# BASE_DIR已经不是项目根路径了---》项目路径下的 luffy_api---》把小luffy_api和apps都加入到了环境变量
# 现在环境变量里有:项目根路径,把小luffy_api和apps----》以后导入模块,可以从下面三个目录下导起
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(BASE_DIR))
path = os.path.join(BASE_DIR, 'apps')
sys.path.insert(0, path)


## 6 如果项目不能运行了
    -先用命令运行看看:python manage.py runserver
    -如果他也不能运行,就是有问题---》就要解决问题
    -如果命令能运行,绿色箭头运行不了
        -删除,再重新建一个即可

        
        

# 项目
    -项目名
        总路由
        配置文件
        wsgi
    -apps
        app01
        app01
    -libs
    -utils

后端数据库创建

 使用mysql
    root账号和密码--->万一泄露---》整个数据库就不安全了
    创建个用户,这个用户只对当前项目 库 有权限
    
    
    
# mysql 创建用户并授权---》5.7
    1.管理员连接数据库
    >: mysql -uroot -p1234

    2.创建数据库
    >: create database luffy default charset=utf8;

    3.查看用户
    >: select user,host from mysql.user;
    
    4.创建用户  设置权限账号密码
    # 授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'

    4.1 配置任意ip都可以连入数据库的账户
    >: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
    4.2 由于数据库版本的问题,可能本地还连接不上,就给本地用户单独配置
    >: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
    
    flush privileges; #刷新权限
    #如果加root用户允许远程链接
    grant all privileges on *.* to 'root'@'%' identified by '1234';
    
    5.使用新创建的用户,登录mysql
        mysql -uluffy -p:Luffy123?

后端user表

# 用户表使用 auth的user表,现在扩写 user表

###### 1 配置使用mysql数据库
# 保护用户名密码
# os.environ  # 机器系统的环境变量
# user = os.environ.get('MS_USER')
# pwd = os.environ.get('MS_PWD')
###如果取不到,用后面的
user = os.environ.get('MS_USER','luffy')
pwd = os.environ.get('MS_PWD','Luffy123?')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',
        'USER': user,
        'PASSWORD': pwd,
        'HOST': 'localhost',
        'PORT': 3306
    }
}
# 可以使用pymysql,但是需要 打补丁
# 直接使用mysqlclient,就不需要任何操作  pip install mysqlclient



#### 2 创建user表
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)
    # 需要pillow包的支持  pip install pillow
    icon = models.ImageField(upload_to='icon', default='icon/default.png')

    class Meta:
        db_table = 'luffy_user'  # 修改表名
        verbose_name = '用户表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

### 3 配置文件配置
###配置用户表
AUTH_USER_MODEL = 'user.User'


###4 迁移:---一定不要忘了注册app    有可能会找不到manage.py 快捷工具
python manage.py makemigrations
python manage.py migrate

后端配置

 导包爆红问题

# 1 把三个目录加入到环境变量了---》项目根路径,小luffy_api,apps
    以后导入模块,可以从上述任意一个路径导入起
     from luffy_api.apps.user.models import User
     from apps.user.models import User
    from user.models import User  #这样写没问题---》但是pycharm提示错误--》让pycharm不报错
    
#2 解决Pycharm 导包爆红问题
    -在文件夹上点右键---》做成source root
    
  
# 3 总结
    # 如果在app内部,就用相对导入
    # 如果在app外部,就从apps路径导起---最短路径

封装logger

# 1 项目肯定要记录日志
    -logru
    -python内置的logging模块---》以它为例讲
    
# 2 只需要按步骤配置即可
    -1 配置文件加入:
    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',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用ERROR
            'level': 'ERROR',
            '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 TestLoggerView(APIView):
        def get(self, request):
            logger.info("info级别")
            logger.error('error级别')
            return Response('测试日志')

封装项目异常处理

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from .common_logger import logger


def exception_handler(exc, context):
    # 只要执行到这,一定意味着程序出了异常,记录日志
    resquest = context.get('request')
    user = resquest.user.id or '未登录用户'
    path = resquest.get_full_path()
    view = str(context.get('view'))
    ip = resquest.META.get('REMOTE_ADDR')
    error = str(exc)
    logger.error('用户:[%s],访问路径:[%s],视图类是:[%s],客户端地址:[%s],出错了,错误信息是:[%s]' % (user, path, view, ip, error))  # 尽量详细

    res = drf_exception_handler(exc, context)
    # 后续咱们可以更新细粒度的区分异常:  887   886  833 分别代表什么
    if res:  # drf 异常
        detail = res.data.get('detail') or res.data or '系统异常,请稍后再试'
        return Response({'code': 999, 'msg': detail})
    else:  # 非drf异常
        return Response({'code': 888, 'msg': '系统异常:%s' % str(exc)})




REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.common_exceptions.exception_handler',
}

 

标签:py,luffy,---,02days,user,import,path
From: https://www.cnblogs.com/wzh366/p/17972603

相关文章