第一章、天天生鲜项目框架搭建
天天生鲜项目搭建指南
一、环境搭建指南
1、首先下载依赖环境
python版本 | |
---|---|
Django版本 | |
mysql版本 |
2、环境搭建
2.1、首先创建文件夹,
本人在Windows电脑F盘创建文件夹Django,并在里面创建子目录dailyfresh_version,运行电脑终端Windows PowerShell,首先按照下面顺序进行配置:
# 第一步,对PowerShell的一种配置
Set-ExecutionPolicy Unrestricted
# 第二步,安装Django所需的虚拟环境
pip install virtualenv
# 第三步,进入当前用户名
cd F:\Django\dailyfresh_version
# 第四步,在打开的文件佳下面下载Django项目所依赖的东西
virtualenv .
# 第五步,进入文件夹下的虚拟环境,使用下列指令切换,
.\Scripts\activate #ps:如果你想取消虚拟环境,运行deactivate
# 第六步,安装django
pip install django #ps:如果你需要安装制定版本,运行pip install django==版本号
# 第七步,创建项目名,我的项目名为dailyfresh
django-admin startproject 项目名 #django-admin startproject dailyfresh
# 第八步,进入项目
cd 项目名 #ps: cd dailyfresh
# 第九步,测试程序是否运行成功
python manage.py runserver
# 第十步,如果需要用VS code软件打开,直接运行下面指令
code .
2.2 项目框架搭建
首先,利用Pycharm打开新建立的项目文件,后期新建项目直接在pycharm下操作
2.2.1 首先安装富文本,使用如下指令
# 第一步 安装富文本编辑器插件
pip install django-tinymce==2.6.0
# 第二步 在setting中添加该应用
INSTALLED_APPS = [#第三方插件应用'tinymce', #富文本编辑器#系统自带应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]
# 第三步 在setting中继续配置富文本编辑器
#富文本编辑器配置
TINYMCE_DEFAULT_CONFIG = {'theme': 'advanced','width': 600,'height': 400,
}
# 第四步 在setting的同级目录下的url.py中添加如下
from django.urls import path,include # 导入两个包# 添加如此指令
urlpatterns = [path('admin/', admin.site.urls),path('tinymce/',include(('tinymce.urls','tinymce'))), #富文本编辑器]
富文本编辑器与模型类有关,富文本编辑器应该查看模型类。
2.2.2 天天生鲜主要包含购物车、货物、用户、还有主页几个功能框,因此我们需要创建这几个app,首先运行如下指令创建
# 第一步,创建四个应用
python manage.py startapp user
python manage.py startapp goods
python manage.py startapp cart
python manage.py startapp order
然后我们新建一个目录来存放这几个应用,并把这些应用放在里头,然后需要去settings中配置应用,本来要写路径,就是这样写apps.user,但是会很麻烦,所以我们打算直接写user、order等等,那我们可以做如下配置
# 第一步,在setting中指定绝对路径
import os
import sys # 调用里面的path路径
# BASE_DIR 项目在哪,绝对路径就在哪?
sys.path.insert(0,os.path.join(BASE_DIR,'apps')) # 项目的绝对路径# 第二步,添加各模块应用
INSTALLED_APPS = [#自定义应用'user', #用户模块'goods', #商品模块'cart', #购物车模块'order', #订单模块#第三方插件应用'tinymce', #富文本编辑器#系统自带应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]
2.2.3 添加一个空目录templates,用于存放静态文件,然后在setting中做如下配置
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
2.2.4 创建数据库,打开linux,安装mysql,我的是在Ubuntu20.4安装的,下面提供mysql的安装教程,
如何在Ubuntu上安装mysql
1、更新镜像源,前面安装时已经配置了,如果没有配置对着下面的参考指南看下
2、下载安装mysql
sudo apt-get install mysql-server # 第一步 sudo apt-get install mysql-client # 第二步 sudo apt-get install libmysqlclient-dev # 第三步
3、下载数据库之后没有密码,故我们根据如下配置
mysql -u root -p # 第一步
找到mysql的根目录:可根据如下流程
pwd(cd …)——>home(cd …)——>ls——>cd /etc/mysql——>ls——>sudo cat debian.cnf——>
指令如下
cd.. # 第一步 cd.. # 第二步 ls # 第三步 cd /etc/mysql # 第四步 ls # 第五步 sudo cat debian.cnf # 第五步
登录mysql,用sudo cat debian.cnf获得的账号密码(倒数第一是密码,倒数第二是账号)
mysql -u debian-sys-maint -p
输入密码
然后退回MySQL,退回主界面再次进入mysql更改密码,如果无法进入,就用管理员身份进入
进入mysql后,执行下面的更改秘密啊
alter user 'root'@'localhost' identified by '123456'
然后退回主界面,输入
mysql -u root -p # EnterPassword: 输入自己设置的密码
发现还是无法进入,然后用管理员模式,也就是前面加个sudo,发现可以进入。所以我们还需要最后设置一步,我们最后一次进入debian-sys-maint用户中,然后在mysql语句中输入如下语句
alter user 'root'@'localhost' identified with caching_sha2_password by '123456'; # 然后退出即可
然后自己看下面的教程吧,你们自己看参考教程吧
mysql配置参考教程
安装好后,在终端中创建数据库
# 第一步 登录mysql数据库
mysql -uroot -p123456
# 第二步 查看数据库
show databases;
# 第三步 创建自己的数据库,我要创建数据库名为dailyfresh_version1
create dailyfresh 数据库名 # create dailyfresh dailyfresh_version1
2.2.5 数据库配置,笔者在linux新建mysql数据库,数据库名为dailyfresh_version1,用户名root,端口号:3306 密码:123456 虚拟机IP端口号:192.168.23.150
首先打开dailyfresh,然后找到setting,然后配置下列信息:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', #使用mysql数据库'NAME': 'dailyfresh_version1','USER': 'root','PASSWORD': '123456','HOST': '192.168.23.150', #连接Ubunut1'PORT': '3306',}
}
然后顺带把时区和地区配置一下,把下面两个参数改变
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
2.2.6 新建静态目录,用于存放一些css和js配置,我们这里将工程目录下的直接复制过来即可,然后我们需要在setting中做如下配置
# 静态文件路径配置
STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
2.2.7 然后在settings.py同级目录下的url中添加如下指令
urlpatterns = [path('admin/', admin.site.urls),path('tinymce/',include(('tinymce.urls','tinymce'))), #富文本编辑器path('user/',include(('user.urls','user'),namespace='user')), #用户模块path('cart/',include(('cart.urls','cart'),namespace='cart')), #购物车模块path('order/',include(('order.urls','order'),namespace='order')), #订单模块path('',include(('goods.urls','goods'),namespace='goods')), #商品模块
]
2.2.8 然后我们把urls.py到apps下的每个应用(order、user、cart、goods)中拷贝一份,我们先拷贝一份,然后我们需要删掉一些东西,后面做项目的时候边做边加,空目录如下:
from django.conf.urls import url
urlpatterns = []
然后把包含这个内容的urls.py文件拷贝到各个应用中。
2.2.9 新建一个python包,命名为db,然后在其目录下新建一个python文件base_model.py,并在里头输入如下内容:
from django.db import modelsclass BaseModel(models.Model):"""模型抽象基类,为所有继承此基类的类加入如下三个字段"""create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')is_delete = models.BooleanField(default=False, verbose_name='是否删除')class Meta:"""说明是个抽象模型类"""abstract = True
2.2.10 为各应用模型类加入如下内容
1、user中的models.py
from django.db import models
from django.contrib.auth.models import AbstractUser # 用户验证类
from db.base_model import BaseModel# Create your models here.class User(AbstractUser, BaseModel):"""用户模型类"""class Meta:db_table = 'df_user'verbose_name = '用户'verbose_name_plural = verbose_nameclass Address(BaseModel):"""地址模型类"""user = models.ForeignKey('User', verbose_name='所属账户', on_delete=models.CASCADE) # 删除user则对应的地址都会被删除receiver = models.CharField(max_length=20, verbose_name='收件人')addr = models.CharField(max_length=256, verbose_name='收件地址')zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')phone = models.CharField(max_length=11, verbose_name='联系电话')is_default = models.BooleanField(default=False, verbose_name='是否默认')class Meta:db_table = 'df_address'verbose_name = '地址'verbose_name_plural = verbose_name
2、goods中的models.py
from django.db import models
from db.base_model import BaseModel
from tinymce.models import HTMLField# Create your models here.class GoodsType(BaseModel):"""商品类型模型类"""name = models.CharField(max_length=20, verbose_name='种类名称')logo = models.CharField(max_length=20, verbose_name='标识')image = models.ImageField(upload_to='type', verbose_name='商品类型图片')class Meta:db_table = 'df_goods_type'verbose_name = '商品种类'verbose_name_plural = verbose_namedef __str__(self):return self.nameclass GoodsSKU(BaseModel):"""商品SKU模型类"""status_choices = ((0, '下线'),(1, '上线'),)type = models.ForeignKey('GoodsType', verbose_name='商品种类', on_delete=models.CASCADE)goods = models.ForeignKey('Goods', verbose_name='商品SPU', on_delete=models.CASCADE)name = models.CharField(max_length=20, verbose_name='商品名称')desc = models.CharField(max_length=256, verbose_name='商品简介')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')unite = models.CharField(max_length=20, verbose_name='商品单位')image = models.ImageField(upload_to='goods', verbose_name='商品图片')stock = models.IntegerField(default=1, verbose_name='商品库存')sales = models.IntegerField(default=0, verbose_name='商品销量')status = models.SmallIntegerField(default=1, choices=status_choices, verbose_name='商品状态')class Meta:db_table = 'df_goods_sku'verbose_name = '商品'verbose_name_plural = verbose_name# def __str__(self):# return self.nameclass Goods(BaseModel):"""商品SPU模型类"""name = models.CharField(max_length=20, verbose_name='商品SPU名称')detail = HTMLField(blank=True, verbose_name='商品详情')class Meta:db_table = 'df_goods'verbose_name = '商品SPU'verbose_name_plural = verbose_namedef __str__(self):return self.nameclass GoodsImage(BaseModel):"""商品图片模型类"""sku = models.ForeignKey('GoodsSKU', verbose_name='商品', on_delete=models.DO_NOTHING)image = models.ImageField(upload_to='goods', verbose_name='图片路径')class Meta:db_table = 'df_goods_image'verbose_name = '商品图片'verbose_name_plural = verbose_nameclass IndexGoodsBanner(BaseModel):"""首页轮播商品展示模型类"""sku = models.ForeignKey('GoodsSKU', verbose_name='商品', on_delete=models.DO_NOTHING)image = models.ImageField(upload_to='banner', verbose_name='图片')index = models.SmallIntegerField(default=0, verbose_name='展示顺序')class Meta:db_table = 'df_index_banner'verbose_name = '首页轮播商品'verbose_name_plural = verbose_nameclass IndexTypeGoodsBanner(BaseModel):"""首页分类商品展示模型类"""DISPLAY_TYPE_CHOICES = ((0, "标题"),(1, "图片"))type = models.ForeignKey('GoodsType', verbose_name='商品类型', on_delete=models.DO_NOTHING)sku = models.ForeignKey('GoodsSKU', verbose_name='商品SKU', on_delete=models.DO_NOTHING)display_type = models.SmallIntegerField(default=1, choices=DISPLAY_TYPE_CHOICES, verbose_name='展示类型')index = models.SmallIntegerField(default=0, verbose_name='展示顺序')class Meta:db_table = 'df_index_type_goods'verbose_name = '主页分类展示商品'verbose_name_plural = verbose_name# def __str__(self):# return self.get_display_type_display()class IndexPromotionBanner(BaseModel):"""首页促销活动模型类"""name = models.CharField(max_length=20, verbose_name='活动名称')url = models.URLField(verbose_name='活动链接')image = models.ImageField(upload_to='banner', verbose_name='活动图片')index = models.SmallIntegerField(default=0, verbose_name='展示顺序')class Meta:db_table = 'df_index_promotion'verbose_name = '主页促销活动'verbose_name_plural = verbose_name# def __str__(self):# return self.name
3、order中的models.py
from django.db import models
from db.base_model import BaseModel# Create your models here.class OrderInfo(BaseModel):PAY_METHOD_CHOICES = ((1, '货到付款'),(2, '微信支付'),(3, '支付宝'),(4, '银联支付'))ORDER_STATUS_CHOICES = ((1, '待支付'),(2, '待发货'),(3, '待收货'),(4, '待评价'),(5, '已完成'))order_id = models.CharField(max_length=128, primary_key=True, verbose_name='订单id')user = models.ForeignKey('user.User', verbose_name='用户', on_delete=models.CASCADE)addr = models.ForeignKey('user.Address', verbose_name='地址', on_delete=models.CASCADE)pay_method = models.SmallIntegerField(choices=PAY_METHOD_CHOICES, default=3, verbose_name='支付方式')total_count = models.IntegerField(default=1, verbose_name='商品数量')total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品总价')transit_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单运费')order_status = models.SmallIntegerField(choices=ORDER_STATUS_CHOICES, default=1, verbose_name='订单状态')trade_no = models.CharField(max_length=128, default='', verbose_name='支付编号')class Meta:db_table = 'df_order_info'verbose_name = "订单"verbose_name_plural = verbose_nameclass OrderGoods(BaseModel):"""订单商品模型类"""order = models.ForeignKey('OrderInfo', verbose_name='订单', on_delete=models.DO_NOTHING)sku = models.ForeignKey('goods.GoodsSKU', verbose_name='商品SKU', on_delete=models.DO_NOTHING)count = models.IntegerField(default=1, verbose_name='商品数目')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')comment = models.CharField(max_length=256, default='', verbose_name='评论')class Meta:db_table = 'df_order_goods'verbose_name = '订单商品'verbose_name_plural = verbose_name
加了这些后,为了讲models.py中的文件迁移到数据库中,我们可以添加如下内容,到settings中加入
#django认证系统使用的模型类
#作用:生成我们所需的模型类对应的表
AUTH_USER_MODEL='user.User'
2.2.11 然后再pycharm中运行python manage.py runserver,不出意外,此时定会报错,因为还未进行数据库迁移,此时我们需要python manag.py migrate,不出意外,又会出现报错,因为虚拟机下的数据库并未给其授权,此时我们需要做如下配置
Django的mysql的远程登录关于linux的配置
首先在终端输入
ifconfig
可能没有安装ifconfig这个插件,我们运行下面的的命令行
sudo apt install net-tools
然后我们需要进入配置文件,把原来的那个地址更改,先运行
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
把里面的
bind address=****改一下,改成ifconfig中显示的那个
然后使用mysql数据库做点配置,
use mysql;
然后输入
select host,user from user;
然后输入
update user set host='%' where user='root';
然后授权数据库
flush privileges;
参考文档
然后还出了一个错,django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.由于pycharm中未安装与数据库相关的应用,此时我们需要再数据库中安装应用,首先我们在dailyfresh文件下的__init__.py中加入
# 第一步,在__init__.py中添加如下内容
import pymysql
pymysql.install_as_MySQLdb()
# 第二步,在终端中安装响应的插件有
pip install pymysql
# 第三步,可能需要安装Pillow
python -m pip install Pillow
# 第四步,安装cryptography
pip install cryptography
# 第五步,在终端执行下面命令
python manage.py makemigrations
# 第六步,将文件迁移到数据库
python manage.py migrate
现在迁移数据库就没有啥问题了。此时我们把数据库与pycharm项目连接完成了
天天生鲜项目搭建文件可从公众号学聚思获取,关注公众号:学聚思、学聚思、学聚思。重要的事情说三遍
本文博客获取关键词:天天生鲜项目框架博客;
本项目关键词:天天生鲜项目框架
请大家按照关键字搜索哦,另外,本人创建了1个QQ群欢迎各位加入讨论
QQ群号:301666877
天天生鲜项目学习视频
另外如果需要其他资源,比如视频中的工程文档,欢迎公众号留言
本内容持续更新直至天天生鲜项目完成!
第一章,环境配置与天天生鲜项目框架搭建
第一章、天天生鲜项目框架搭建相关推荐
- 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建
第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...
- 第一章:基于 SpringBoot 快速搭建QQ机器人,并监听群事件
第一章:基于 SpringBoot 快速搭建QQ机器人 前言:知识与储备 这个QQ机器人能干什么? 第一步:搭建Maven项目环境 第二步:编写pom文件 第三步:编写启动类 第四步:创建配置文件 第 ...
- 天天生鲜项目开发笔记
天天生鲜项目开发笔记 说在前面的话 大学四年,忙忙碌碌,什么都学了,又好像什么都没学,总之要毕业了,毕设题目是"生鲜配送系统",B站上找到了一个天天生鲜的项目开发教程,之后文章记录 ...
- (三) Angular2项目框架搭建心得
前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...
- Android最好用的项目框架搭建
本篇先记录下当前项目中涉及的主要技术要点.也算是对所作项目的一次总结.如果这个过程能对你有些许的帮助,那可能就显得有意义点了. 一个完整的Android项目会涉及后台和前端.我们只关注于前端,也就是我 ...
- spring cloud多模块项目框架搭建-Redis-Cluster集群搭建及系统集成
第九章 Redis-Cluster集群搭建及系统集成 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统 ...
- spring cloud多模块项目框架搭建-集成lombok
第五章: spring cloud多模块项目框架搭建-集成lombok 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的de ...
- spring cloud多模块项目框架搭建-集成SLF4J和log4j2日志组件
第七章 集成SLF4J和log4j2进行日志管理 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块项目框架,并不是一个spring cloud的demo而已,提供分布式系统的 ...
- SpringBoot后端项目框架搭建
SpringBoot后端项目框架搭建 本节内容服务于SpringBoot + Vue 搭建 JavaWeb 增删改查项目. 工具安装 电脑已安装\配置如下工具: IDEA.jdk.MySQL及其可视化 ...
- SpringSecurity(二)、权限项目框架搭建
Springboot + SpringSecurity权限项目框架搭建 目录 一.项目介绍 二.项目搭建(父子工程) 1.添加 pom 依赖 2.修改 yml 配置 3.编写JwtTokenUtil工 ...
最新文章
- BZOJ2831(小强的金字塔系列问题--区域整点数求法)
- apply plugin: 'idea' --- gradle idea
- Python进阶:程序界的垃圾分类回收
- JavaWeb学习之路——SSM框架之Spring(六)
- Nacos-Nacos和Eureka的对比
- android各种color值
- oracle sql 分区查询语句_Oracle 分区概述
- 【资源下载】512页IBM沃森研究员Charu最新2018著作《神经网络与深度学习》(附下载链接)
- CSS快速学习7:定位锚点
- python plt引用_先引用matplotlib.pyplot再引用tensorflow报错问题
- 【论文制图】chemdraw安装与使用
- 如何查看宇视科技摄相机是否支持反向供电
- 初次联系导师短信模板_复试消息汇总!复试资料到位,联系导师模板到位,只等你!...
- 用英语计算机房造句子,机房造句
- TCP 的三次握手(简述)
- o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
- 向量相加后是否与目标向量平行
- 微信公众号开发接收不到xml数据
- Word中多级列表编号变成黑色方块的解决方案
- 团队活动安排工具Rallly