01.meiduomall项目day01学习笔记
1,项目开发流程
- 目的: 知道项目的开发流程即可
- 图解:
2,开发模式
- 目的: 知道项目的两种开发模式
- 前后端不分离:
- 前后端分离:
3,项目架构设计
-
目的: 知道美多商城技术选型
-
开发模式 前后端不分离 后端框架 Django + Jinja2模板引擎 前端框架 Vue.js
4,项目创建(码云)
-
目的: 可以在gitee上面创建项目, clone到本地管理美多商城项目
-
操作流程:
- 1, 登录到码云创建仓库
- 2, clone仓库到本地
- 3, 进入到仓库, 创建项目
- 4, 上传项目到远程仓库
-
我的操作流程:
- 1, 登录到码云创建仓库
- 2.clone仓库到本地 找一个文件夹右键执行 git clone https://gitee.com/arthurhuang123/meiduo.git【项目https地址】
- 3.自己在这个文件夹中用pycharm创建一个django项目
- 4.上传项目到远程仓库:
- git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。
- git add 命令可将该文件添加到暂存区。git add 项目名/
- git commit 命令将暂存区内容添加到本地仓库中。git commit -m '创建工程的一些注释信息'
- git push 命用于从将本地的分支版本上传到远程并合并。
-
注意点:
- .gitignore作用: 忽略不需要使用git管理的文件
- .idea文件夹是pycharm自带的用户个人配置(颜色,字体等)不用上传到仓库!
- /.idea/文件添加到.gitignore中
- 执行 vi gitignore
- 将 .idea/ 添加到文件中
- .gitignore作用: 忽略不需要使用git管理的文件
-
注意点2:
-
1, 配置仓库的目录, 在pycharm中
-
2, 使用git进行提交测试
-
5,开发环境配置
-
目的: 可以配置项目的两套运行环境
-
操作流程:
-
1,创建settings包, 创建dev.py(开发环境), 创建prod.py文件(生产环境)
-
2, 修改启动加载的配置文件,在manage.py中可以进行切换
-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.dev")
-
-
-
注意点:
- 配置manage.py 作为启动文件
- 配置manage.py 作为启动文件
6,jinja2模板引擎
-
目的: 能够配置jinja2的模板语法
-
操作流程:
-
1, 创建templates文件夹
-
2, 配置相关的模板语法(meiduo_mall/settings/dev.py)
-
TEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 加载jinja2引擎 'DIRS': [os.path.join(BASE_DIR,'templates')], #模板存储位置 ... 'OPTIONS': { 'environment':'meiduo_mall.utils.my_jinja2.environment', #设置全局的环境变量方法 ... ], }, }, ]
-
-
3, 配置全局方法(meiduo_mall/utils/my_jinja2.py)
-
from __future__ import absolute_import # Python 2 only from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse from jinja2 import Environment def environment(**options): env = Environment(**options) env.globals.update({ 'static': staticfiles_storage.url, # static方法 'url': reverse, #url方法 }) return env
-
-
7,mysql配置
-
目的: 可以参考官方文档, 配置数据库
-
操作流程:
-
1, 配置数据库连接信息(meiduo_mall/settings/dev.py)
-
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'meiduo17', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', } }
-
-
2, 创建数据库(在终端创建即可)
-
3, 配置pymysql作为驱动(meiduo_mall/init.py)
-
# 配置pymysql作为mysql的驱动 import pymysql pymysql.install_as_MySQLdb()
-
-
8,配置redis数据库
-
目的: 参考文档, 配置redis, 用于以后的缓存信息
-
操作流程:
-
1, 配置redis存储信息(meiduo_mall/settings/dev.py)
-
# redis配置 (redis功能:处理缓存信息,持续更新...) CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } # session状态保持信息存储位置 SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session"
-
9,日志工程的配置
-
目的: 可以配置日志信息, 记录用户的访问行为, 或者程序运行的行为
-
操作流程:
-
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在debug模式下才输出日志 '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { # 日志处理方法 'console': { # 向终端中输出日志 'level': 'INFO', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { # 向文件中输出日志 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'), # 日志文件的位置 'maxBytes': 300 * 1024 * 1024, #日志大小 'backupCount': 10,# 日志个数 'formatter': 'verbose' }, }, 'loggers': { # 日志器 'django': { # 定义了一个名为django的日志器 'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志 'propagate': True, # 是否继续传递日志信息 'level': 'INFO', # 日志器接收的最低日志级别 }, } }
-
-
2, 创建日志记录的文件夹(logs)
-
10,静态文件集成
-
目的: 可以将项目中用到的静态文件集成到工程中
-
操作流程:
-
1, 配置静态文件存储位置(dev.py)
-
# 配置静态文件资源存储位置的(绝对路径) STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
-
-
11,创建用户模块子应用
-
目的: 可以在apps中创建子应用
-
操作流程:
-
1, 在meiduo_mall根应用中创建apps包
-
2, 进入到apps中, 创建users子应用
-
python ../../manage.py startapp users
-
-
12,设置导包路径
-
目的: 可以将apps设置为导包路径
-
操作流程:
-
1, 导包路径配置(dev.py)
-
# 告诉pycharm apps作为导包路径, 当使用apps中的子应用的时候, 可以不需要写前缀,直接使用子应用名称即可 import sys sys.path.insert(0,os.path.join(BASE_DIR,'apps')) # print(sys.path) #导包路径 INSTALLED_APPS = [ ... # 'users', # 展开时候就是下面的形式 'users.apps.UsersConfig' ]
-
-
13,展示用户注册页面
-
目的: 可以编写类视图,展示注册页面
-
操作流程:
-
1, 根路由(urls.py)
-
url(r'^', include('users.urls'))
-
-
2, 子路由(users/urls.py)
-
from django.conf.urls import url from . import views urlpatterns = [ url(r'^register/$',views.RegisterView.as_view()) ]
-
-
3, 类视图(users/views.py)
-
from django.shortcuts import render from django.views import View # 1, 注册页面视图 class RegisterView(View): def get(self,request): return render(request,'register.html')
-
-
-
注意点:
- 需要将register.html移动到templates中
14,用户模型类创建
-
目的: 可以定义用户模型类, 设置相关的属性
-
操作流程:
-
1, 定义模型类(users/models.py)
-
from django.db import models from django.contrib.auth.models import AbstractUser # 1,定义用户模型类 class User(AbstractUser): #1, 增加额外的属性 mobile = models.CharField(verbose_name="手机号",max_length=11,unique=True) #2, 指定表名信息 class Meta: db_table = "tb_users"
-
-
2, 配置自定义模型类(dev.py)
-
# 设置自定义的认证模型类 AUTH_USER_MODEL = 'users.User'
-
-
-
注意点:
- 集成系统AbstractUser的好处
- 1, AbstractUser提供了通用的属性, 比如: username ,password ….
- 2, AbstractUser提供了密码加密方法, 和校验方法
- 集成系统AbstractUser的好处
15,用户模型类迁移
- 目的: 可以迁移用户表数据, 并知道系统当中的相关表的产生
- 操作流程:
- 1, python manage.py makemigrations
- 2 python manage.py migrate
16,注册业务分析
- 目的: 知道美多商城注册业务流程
- 图解:
17,注册接口设计
- 目的: 可以设计注册接口四要素
- 图解:
18,注册前端业务逻辑分析
-
目的: 知道前端点击注册按钮之后的执行流程
-
操作流程:
- 1, 当点击注册按钮
- 2, 触发on_submit方法, 会做对应的数据校验操作
- 3, 进行表单post提交, 提交的接口是/register
-
补充: 注册的时候跳转淘宝
-
1, 在注册表单中添加{{csrf_input}} (register.html)
-
2, 类视图,编写post方法(users/views.py)
-
class RegisterView(View): ... def post(self,request): return redirect('http://www.taobao.com')
-
-
19,注册后端业务实现
-
目的: 可以获取前端的注册信息, 进行校验, 创建用户保存到数据库
-
操作流程:
-
1, 类视图(users/views.py)
-
# 1, 注册页面视图 class RegisterView(View): ... def post(self,request): #1, 获取参数 user_name = request.POST.get("user_name") pwd = request.POST.get("pwd") cpwd = request.POST.get("cpwd") phone = request.POST.get("phone") msg_code = request.POST.get("msg_code") allow = request.POST.get("allow") #2, 校验参数 #2,1 为空校验 if not all([user_name,pwd,cpwd,phone,msg_code,allow]): return http.HttpResponseForbidden("参数不全") #2,2 两次密码一致 if pwd != cpwd: return http.HttpResponseForbidden("两次密码不一致") #2,3 手机号格式正确 if not re.match(r'^1[3-9]\d{9}$',phone): return http.HttpResponseForbidden("手机号格式有误") #2,5 短信验证码正确(下一次完成) print("msg_code = %s"%msg_code) #2,6 协议需要同意 if allow != 'on': return http.HttpResponseForbidden("协议需要同意") #3, 数据入库 user = User.objects.create(username=user_name,password=pwd,mobile=phone) #4, 返回响应 return redirect('http://www.taobao.com')
-
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?