3-项目初始化+数据库的设计+xadmin配置

######

本章的内容是数据库的设计

#############
项目初始化:

首先要新建我们的项目 新建项目之前,第一步要新建我们的虚拟环境,
怎么创建虚拟环境:
1,先在自己电脑安装Python3.6
2,然后创建虚拟环境指向Python3.6,虚拟环境的名字,vueshop,
命令:mkvirtualenv --ppython=python3.6的pyhon.exe的路径 虚拟环境的名称,
这是在用python3.6新建我们的虚拟环境,需要安装一段时间,
3,创建完之后就会进入虚拟环境,输入python,就是python3.6
4,首先要安装的就是django,
安装命令,pip install -i https://pypi.douban.com/simple django==1.11.3
直接使用豆瓣源来加速我们的安装,
安装版本是django1.11.3 不指定版本的话就是最新的django,
5,然后安装django rest framework,要知道django rest framework是依赖django的,所以一定要有django的安装,
安装命令,pip install djangorestframework
执行命令,pip list 可以看到这个安装的外部包的列表,
有空看看drf的官方文档,https://www.django-rest-framework.org/
还要继续安装,
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

6,然后就是新建django项目了,
新建项目的时候选择django类型,起一个项目名字,MxShop,
然后选择interpret,也就是解释器,这个解释器实际就是虚拟环境里面的python.exe文件,
放到了e盘的,Evns,下面,有各个虚拟环境,就会有vueshop的虚拟环境,选择python.exe文件,
但是为什么创建了虚拟环境的时候为什么自动就会在这个目录进行创建呢???
所以怎么自定义的,
mkvirtualevn,执行这个命令的时候,如何指定我么虚拟环境的保存的位置呢,
----->计算机-环境变量,高级系统设置,有一个workon_home,这个地方可以指定一下,然后就可以了,后面的虚拟环境,就会创建到这个目录,
more setting 可以设置一个默认的app 的名称,设置一个,users,
有一个enable django admin的复选框,不要选,我们用xadmin,

7,新建了项目之后,你就可以看到目录了,这个时候你是可以看到虚拟环境安装的包的, 这个地方注意,是需要后面分析源码的,
一开始会新建索引,会花一些时间,
然后运行这个地址,就会看到it worked
然后就成功了,

8,下一步,看看如何安装一些必须的包,
默认的django是用sqlite的数据库,但是我们要用mysql,
改成myslq的配置,这个配置是固定的,百度就能收到,
要指定一下数据库mxshop,
有一个设置mysql的引擎的地方,这个如果不清楚,就去搜索一下,innodb的用的多,因为后面第三方登陆的时候数据库表是这个引擎,
然后Navicat新建一个数据库,字符集一定是utf-8 Unicode,排序按照utf8_general_ci
这个时候运行是会报错的,缺少mysql的驱动,
我们要用mysqlclient,

如果还有报错:Django:报错django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")解决方案
'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'}改为: 'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}

安装命令:pip install mysqlclient
慢,使用豆瓣源,pip install -i https://pypi.douban.com/sample mysqlclient
安装的时候可能会出错,怎么解决?
地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
这个地址非常的重要,因为windows下安装的时候经常出错的安装包,
大家可以去下载这个安装包,然后使用pip install 这个文件的包,就可以安装好了,

---
还有一个包:pillow
安装命令,pip install -i https://pypi.douban.com/sample pillow,
这是图片处理的,可以支持上传图片,处理图片的包,
----
这是一开始的依赖包,后面还有,但是后面遇到了再安装,


 

 ###########

组织一下项目结构
1,新建一个apps的文件夹,放置所有的app
把users拖动进来,
2,新建一个extra_apps文件夹,和apps同级别,放置第三方的包,
比如xadmin放到这个里面,
如果我们想要修改源码就放到这个文件夹里面来,这样就不会在虚拟环境中,而是随着打包到源码包里面,
3,media,
这是上传图片放到这个下面,
4,templates,这个已经有了
5,db_tools,
为什么会有这个,这个Python文件,Python脚本,初始化的脚本,可以放到这里面,

最后一个mark一下,mark directory as -----source root
mark会带来方便,不mark也行,

还有一个setting文件里有一个非常的重要
下面的操作是加入到Python的根搜索目录之下,
import sys
sys.path.insert(0,BASE_DIR) BASE_DIR这个就是在获取根目录
sys.path.insert(0,os.path.join(BASE_DIR,"apps")) 这是把这个apps的目录加入进来,
sys.path.insert(0,os.path.join(BASE_DIR,"extra_apps"))

这个非常的重要,否则用cmd运行的时候会出错的,

 

#########

开始设计表
看看前端首页,倒退表结构,
生鲜的网站,
1,所以需要商品表
2,需要商品类别, 三级的类别,

页面
1,有首页,
2,商品列表页,
3,商品详情页,商品可以收藏,加入购物车,
4,登陆页面,
5,个人中心,
有订单中心,
----我的订单,
----收获地址,可以新增,修改,删除,
有会员中心,
----用户信息,
----我的收藏,可以删除,点击点击进入商品详情页,
----我的留言,可以上传文件,
6,购物车页面,可以操作修改,删除,
7,结算 页面,可以操作修改,删除,

django开发之前是需要定义好app,
就是功能分类,
1,商品,goods
2,订单,trade
3,用户,user
4,用户操作相关,user_operation
新建app的操作
菜单tools ---run manage.py task
命令,startapp app名字,
注意,这些app的设计是根据自己的开发经验的,不是必须的要这样设计,但是还是要符合一定的原则和逻辑的,不要乱设计,


django第一步就是设计model,这是很重要的,

1,首先设计user相关的,我们知道django自带的user表是不能满足我们的需求的,所以要自己设计,扩展我们的一些字段,
但是还是要继承django的user的,
设计表的时候就有很多的细节,

2,goods相关的表
新建表的时候是根据业务来抽象出来的,这个要考虑好,
另外有几个设计model的关键的点,
help_text,
related_name这两个,
设置一个字段外键为这个表自身,self,
Meta,
__str__
choice属性,
null,blank,
这都是基本的知识,

业务相关的
比如商品的编码是需要设计单独字段的
设计生日而不是年龄,这样就可以年龄自动算出来了,
设计单独的表存放验证码,
设计单独的表存放分类对应的品牌图标,因为图标有多个
商品的点击数,
商品的卖多少件,
商品的库存,
商品的价格,需要使用float,
商品的简介,需要富文本的,用的第三方的,

3,trade相关的表
订单表需要一个trade来存储支付宝返回的订单号,
订单需要一个订单详情表,因为每一个订单是可能多个商品的,

4,用户操作相关的表
添加商品收藏,
添加收货地址,
添加留言,

 

 #########

 

migration的原理,
1,第一步makemigration
这是把app下面的新建了,migration文件夹,
里面存放了,每一次数据库变更的py脚本,这一步只是生成这个脚本,

2,第二步migrate,

注意1:
这个可以加APP的名称,这样只会生成这个app的表,
不填写,就是应用到所有的app,

注意2:
要注意这里面是没有auth_user的表了,只有我们自己的users_userprofile表了,因为我们指定使用自己的表,

注意3:
这个表的格式是:app的名字_表名,

migrate的时候怎么检测到只执行最后的文件,而不执行其他的文件的呢?
这是涉及到django里面有一个非常重要的表,django_migrations这个表,
这个表详细的记录了,所有的迁移文件,app,文件的名称,
这里面记录了我已经运行了哪些Py文件了,所以在迁移的时候,先去表里查一下有没有记录,如果有记录就不执行了,如果没有记录就执行,

所以这里面有一些有坑的地方,
1,如果migrate了之后一直不生效,就可能是已经运行过了,
怎么办?
就把所有good相关的表删除,然后把django_migrations这个表执行记录也删除,
然后运行migrate就会生成好,
这是非常的方便的,所以一定要善于使用这个django的migrate,

2,有的人加了一个字段,直接在数据库增加了字段,没有migrate的方式新增,
如果这两种方式混用的话,这是极其容易出错的,
所以尽量使用migrate的方式,

 

########

xadmin的配置,只讲配置,不讲使用,之前讲过了,不再重复,
1,不要用官网的xadmin,官网的xadmin对python3.6的支持是有问题的, 所以不建议使用,
2,直接把处理好的xadmin,copy过来,
3,把对应app里面的xadmin也copy过来,
注意需要把apps和extra_app右键,mark成为source,
在setting中新增:
sys.path.insert(
0, BASE_DIR) sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))

4,把xadmin放到setting中的app里面,这是一个app,
还有一个    'crispy_forms',,这个也加入app,xadmin需要用到,

5,还要安装xadmin的依赖包,
在github搜索xadmin,找到源码,然后找到requestment,把里面的包在虚拟环境中依次安装好,就可以了,
命令:pip install django-crispy-forms django-import-export django-reversion django-formtools future httplib2 six
还要安装两个,pip install xlwt xlsxwriter---这是导出exl文件的,

6,xadmin还是需要一些表的,所以要生成表,直接migrate就可以了,因为迁移文件已经生成了,

7,需要配置一个xadmin的访问路径,所以在url里面,

8,现在都创建完了所有的表,但是没有一个用户,所以还需要一个用户,
createsuperuser

9,http://127.0.0.1:8000/xadmin/然后登陆这个就成功了,

10,setting中设置时区,
中文展示,
刷新xadmin后台就是中文了,

11,配置app下面的apps.py,
    verbose_name = "用户"
配置了这个,app的名字也改变成为配置的内容了,


####

 

 #####

为什么使用xadmin?
因为xadmin如果对于后台要求不太高,定制化不太强的情况下,使用这个xadmin几乎可以说是零成本的,
xadmin的功能非常的强大的,

 

################

批量导入数据,
1,准备好图片文件,这是放到media/goods/data/
2,准备好文本文件,db_tools/data/
这个所有的data文件都是使用的py文件存储的,而不是excle文件,这样有什么好处?
一是因为可以更加方便的修改,
二是独立使用django的model,这个是可以独立使用的,这也是为了练习使用这个独立使用django的model

导入了图片之后是裂图,是因为没有指定目录,
在setting中设置,
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
这个配置完了之后还不够,还需要在url中设置一个,
url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),

这是两块大的数据,其他的小的数据,等到后面用的时候直接添加,

##

 

 

 

 

########

url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
posted @ 2021-01-26 21:41  技术改变命运Andy  阅读(175)  评论(0编辑  收藏  举报