luffy商城项目(一)

企业项目类型

# 1 面向互联网用户:商城类项目
    -微信小程序商城
    
# 2 面向互联网用户:二手交易类的
    -咸鱼
    -转转
  
# 3 公司内部项目:python写的重点
    -oa系统
    -打卡系统工资核算系统
    -第三方公司做的:
        -给医院 互联网,内部的项目
        -银行 内部系统
        -政府 
        -钢材市场,商户
    - 微信小程序订餐
        -二维火 餐饮行业
    -零售行业
    -问卷网
    -考试系统
    -django+simpleui:二次定制
    
# 4 个人博客

# 5 内容收费站
    -掘金
    
# 6 房屋租赁
    -青客
    -蛋壳
    -自如

 企业项目开发流程

开发流程 

    1.-立项
    2.-需求分析
        # 互联网项目
            -需求调研和分析:产品经理设计出来的
        # 传统软件
            -需求调研和分析:市场人员跟客户对接
    
    3.-原型设计:产品经理 
        -懂业务
    4.-分任务开发
        4.1-前端团队
            -UI设计
            -前端写代码(pc,小程序,移动端)
        4.1-后端团队
            -架构,数据库设计
            -分任务开发:用户,商品板块
           
        4.2-联调测试
        
    5.-项目上线

 

如果在面试的时候被问到你在公司开发流程是什么?可以按照下面的流程来

新项目

开新项目,先开会,设计技术选型,数据库设计
        -产品经理,原型图做好了
        -老大在项目管理平台(禅道)分配任务给我
        -进入到管理平台就能看到任务,相关功能的原型图
            -需求,原型图,实现的效果
        -开发---有不明白的需求,找产品对接----》自测
        -提交到版本仓库(git,svn)
        -所有都开发完了,分支合并
        -跟前端联调
        -发版:

老项目 

-老大在项目管理平台(禅道)分配任务给我
-进入到管理平台就能看到任务,相关功能的原型图
   -需求,原型图,实现的效果
-开发---有不明白的需求,找产品对接----》自测
-提交到版本仓库(git,svn)

-所有都开发完了,分支合并
-跟前端联调
-发版:

路飞项目需求

路飞项目就是一个线上销售课程的web

  -商城
       -知识付费类

需求

-首页功能
        -轮播图接口
        -推荐课程接口
-用户功能
    -用户名密码登录
    -手机号验证码登录
    -发送手机验证码
    -验证手机号是否注册过
    -注册接口

-课程列表功能
    -课程列表接口
    -排序,过滤,分页

-课程详情
    -课程详情接口
    -视频播放功能
    -视频托管(第三方,自己平台)

-下单功能
    -支付宝支付:生成支付链接,付款,回调修改订单状态
    -购买成功功能

路飞首页 

 

路飞登录注册页

 

 

 

 

 

pip换源

python中下载第三方模块

pip3 install django -i 源地址

永久换源

执行下面的配置后我们再输入pip3 install django  就会取配好的国内镜像下载

1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\Users\电脑用户\AppData\Roaming 文件夹中(C:\Users\admin\AppData\Roaming)
2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件
3、新增 pip.ini 配置文件内容
    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple
    [install]
    use-mirrors =true
    mirrors =https://mirrors.aliyun.com/pypi/simple
    trusted-host =mirrors.aliyun.com 

虚拟环境

Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。
  这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的2.0版本但应用程序B需要3.0版本,则需求存在冲突,安装版本2.0或3.0将导致某一个应用程序无法运行。

什么是虚拟环境,为什么要有它?它解决了什么问题
    -操作系统装了python3.8
        -使用django 2.2.2开发了一个项目
        -使用django 3.x 开发了一个i项目
        -把两个项目都打开,同时开发
    -每个项目都用自己独立的环境,装的模块相互不影响
    -两种解决方案:
        Virtualenv
        pipenv 

Virtualenv如何创建虚拟环境 

关于环境变量

    	-作用?一个可执行文件的路径如果加入到环境变量,以后再任意路径敲这个命令都能找到-系统环境变量和用户环境变量-操作系统多用户-如果设置成系统环境变量,所有用户都能用到这个配置-设置成用户环境变量,只针对与当前用户(咱么设这个即可

1.  win下安装(linux和mac装virtualenvwrapper)

pip3 install virtualenv
pip3 install virtualenvwrapper-win

2. 配置环境变量

控制面板 => 系统和安全 => 系统 => 高级系统设置 => 环境变量 => 用户变量 => 点击新建 => 填入变量名与值
    变量名:WORKON_HOME  变量值:自定义存放虚拟环境的绝对路径
    eg: WORKON_HOME: D:\Virtualenvs

    去d盘根路径创建出 Virtualenvs 文件夹

 

3.  同步配置信息 

 同步配置信息:bat只是win的批处理文件,linux和mac  .sh
        去向Python3的安装目录 => Scripts文件夹 => virtualenvwrapper.bat => 双击 

4. 使用虚拟环境

确认好装在哪个解释器下

# 1、创建虚拟环境到配置的WORKON_HOME路径下
    # 选取默认Python环境创建虚拟环境:
        -- mkvirtualenv 虚拟环境名称
    # 基于某Python环境创建虚拟环境:并进入
        -- mkvirtualenv -p python2.7 虚拟环境名称
        -- mkvirtualenv -p python3.8 虚拟环境名称

    # 2、查看已有的虚拟环境
        -- workon

    # 3、使用某个虚拟环境
        -- workon 虚拟环境名称

    # 4、进入|退出 该虚拟环境的Python环境
        -- python | exit()

    # 5、为虚拟环境安装模块
        -- pip或pip3 install 模块名

    # 6、退出当前虚拟环境
        -- deactivate

    # 7、删除虚拟环境(删除当前虚拟环境要先退出)
        -- rmvirtualenv 虚拟环境名称

pycharm创建虚拟环境 

 

路飞后台创建目录调整

# 创建项目,需要选择咱们的虚拟环境创建

        -进入到虚拟环境,安装django,指定版本
        -django-admin startproject 项目名

# 使用虚拟环境创建路飞项目前,一定要先安装django,否则会以最新django创建

 

调整路飞后端项目的目录

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

dev和prod两个py文件都是有原来的settings.py文件复制而来 

 

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

注册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)

-运行项目跑不起来了---》原因是--》项目运行,需要先找到配置文件,现在找不到了
    -修改 manage.py 内的代码
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')
    -以后项目上线,不是使用manage.py 跑,而使用wisg.py 跑,现在先改好【目前用不到】
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.pro')
    -asgi.py 也改好【目前用不到】
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.pro') 

配置文件改了路径,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) 

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

后端数据库创建

# 数据库使用mysql,配置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',
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度剖析 Spring 框架在 Java 应用开发中的优势与应用

Spring 是用于企业 Java 应用程序开发的最流行的应用程序开发框架。全球数百万开发人员使用 Spring Framework 创建高性能、易于测试和可重用的代码。Spring Framework 是一个开源的 Java 平台。它最初由 Rod Johnson 编写,并于 2003 年 6 月在 Apache 2.0 许可下首…

监督学习 - 梯度提升机(Gradient Boosting Machines,GBM)

什么是机器学习 梯度提升机(Gradient Boosting Machines,GBM)是一种集成学习方法,通过将多个弱学习器(通常是决策树)组合成一个强学习器来提高模型的性能。GBM的训练过程是通过迭代,每一步都根…

leetCode-42.接雨水

📑前言 本文主要是【算法】——算法模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#xff…

git提权

实验环境——vulnhub-dc2靶场 git提权 前提:用户可以使用sudo中git权限 查看sudo权限 sudo -l可以发现git命令存在sudo提权 基于此进行权限提升 方式: sudo git help config #在末行命令模式输入 !/bin/bash 或 !sh #完成提权 sudo git -p help…

直接发文!1D-2D-MTF-CNN-GRU-AT多通道图像时序融合的分类/故障识别程序!Excel导入,直接运行

​适用平台:Matlab2023版本及以上 本程序同时结合两篇国内顶级EI的方法:提出1D-2D-MTF-CNN-GRU-AT多通道图像时序融合的分类/故障识别程序! ①中文EI期刊《电力自动化设备》12月29号网络首发文献:《基于格拉姆角场与并行CNN的并…

【PyTorch】PyTorch之Reduction Ops

文章目录 前言一、ARGMAX二、ARGMIN三、AMAX和AMIN四、ALL和ANY五、MAX和MIN六、MEAN七、MEDIAN八、NORM九、PROD十、STD十一、SUM十二、UNIQUE十三、VAR 前言 介绍pytorch的Reduction Ops。 一、ARGMAX torch.argmax(input, dim, keepdimFalse) → LongTensor Parameters&a…

HTTP与HTTPS:网络通信的安全卫士

目录 引言 1. HTTP(Hypertext Transfer Protocol) 1.1HTTP的基本概念 1.2 HTTP的工作原理 1.3 HTTP请求与响应 1.4HTTP特点 1.4.1 无状态性 1.4.2 明文传输 1.4.3 简单快速 1.5 HTTP的安全性 2. HTTPS(Hypertext Transfer Protoco…

UML相关问题及答案(2024)

1、什么是 UML,并且它通常用于什么目的? UML(统一建模语言,Unified Modeling Language)是一种标准的建模语言,它被广泛地用于软件和系统工程、业务建模以及其他非软件系统的可视化文档。UML 不是一种编程语…

突破Android开发瓶颈:6年Android开发者的实用建议

作为一名在Android领域摸爬滚打6年的老手,我想给那些在这个行业工作了3~5年的朋友们提供一些职业和技术上的建议。 许多开发者在职业生涯中都会遇到一个瓶颈期,尤其是当你在一个公司待了很长时间,感觉自己的技术和业务能力都无法得到提升时。…

多输入多输出 | Matlab实现基于LightGBM多输入多输出预测

多输入多输出 | Matlab实现基于LightGBM多输入多输出预测 目录 多输入多输出 | Matlab实现基于LightGBM多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于LightGBM多输入多输出预测(完整源码和数据) 1.data为数据集&a…

近期学习文章

DNSlog在渗透测试中的实战技巧 - 网安隐藏源IP,提高溯源难度的几种方案 - 网安FreeBuf网络安全行业门户 【漏洞公告】某平台一个有意思的CSRF // SecTrain安全博客 浅谈Web源码泄漏-安全客 - 安全资讯平台 红队-C2 Server基础构建 - 先知社区FreeBuf网络安全行业…

【电力电子在电力系统中的应用】2 CCM和DCM模式下Cuk电路的升降压工作状态

【仅供参考】 【2023.03西南交大电力电子在电力系统中的应用】 目录 0 仿真要求 1 仿真电路搭建及波形记录 1.1 CCM工作模式 1.1.1 升压模式 1.1.2 降压模式 1.2 DCM工作模式 1.2.1 升压模式 1.2.2 降压模式 1.3 改变开关频率和电容参数 1.3.1 改变开关频率 1.3.2 …

高清网络视频监控系统技术方案

目 录 一、概述 二、建设目标及需求 (一)建设总目标 (二)需求分析 三、设计依据与设计原则 (一)设计依据 (二)设计原则 四、建设方案设计 (一&…

实用干货:最全的Loading动画合集网站!复制即用

大家好,我是大澈! 本文约1000字,整篇阅读大约需要2分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

html5为什么只需要写<!doctype html>? 有多少种Doctype文档类型?

HTML5只需要写<!doctype html>是因为HTML5不基于SGML&#xff0c;不需要对DTD进行引用&#xff0c;但仍需要doctype来规范浏览器的行为。而HTML4.01基于SGML&#xff0c;需要对DTD进行引用&#xff0c;才能告知浏览器文档所使用的文档类型。 Doctype文档类型是指用于标识…

01-开始Rust之旅

1. 下载Rust 官方推荐使用 rustup 下载 Rust&#xff0c;这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要连接互联网。 这边提供了离线安装版本。本人学习的机器环境为&#xff1a; ubuntu x86_64&#xff0c;因此选用第②个工具链&#xff1b; 1. rust-1.75.0-x86_…

github 通过ssh进行连接的另一种方式

一般使用ssh连接是通过22端口。如果已经把ssh公钥假如到了github中还无法连接。可以通过 ssh -T gitgithub.com测试一下。如果报出 ssh: connect to host github.com port 22: Connection timed out 可以通过443 端口进行连接 $ ssh -T -p 443 gitssh.github.com注意&#xf…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

【前端设计】流光按钮

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 css body{height: 100vh;display: flex;justify-content: center;align-items: center;background…

rbash环境变量提权

rbash为一个受限制的bash shell变体&#xff0c;限制用户在交互式环境中可使用的操作&#xff0c;以此提升系统安全性 可通过环境变量提权方式&#xff0c;越过此限制 export -p //查看环境变量 BASH_CMDS[a]/bin/sh;a //把/bin/sh给a /bin/bash export PATH$…