第一章、天天生鲜项目框架搭建
天天生鲜项目搭建指南一、环境搭建指南1、首先下载依赖环境python版本Django版本mysql版本2、环境搭建2.1、首先创建文件夹,本人在Windows电脑F盘创建文件夹Django,并在里面创建子目录dailyfresh_version,运行电脑终端Windows PowerShell,首先按照下面顺序进行配置:# 第一步,对PowerShell的一种配置Set-ExecutionPoli
天天生鲜项目搭建指南
一、环境搭建指南
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 -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 models
class 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_name
class 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_name
def __str__(self):
return self.name
class 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.name
class 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_name
def __str__(self):
return self.name
class 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_name
class 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_name
class 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_name
class 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
另外如果需要其他资源,比如视频中的工程文档,欢迎公众号留言
本内容持续更新直至天天生鲜项目完成!
更多推荐
所有评论(0)