姜哥手把手教你做网站(5):创建商品模型
2018-03-04 16:55
204 查看
在上一讲中,姜哥提到了两个重要的文件,那就是settings.py和models.py。一个用来定义我们的数据库连接,一个用来定义我们的数据模型。
如果你没有这个方块,可以点击上面的加号,添加一个:
输入安装时候填写的数据库密码,并且记住它~
在shema这里右击,选择create shema,然后按照我截图中的参数,填入信息,点击apply,创建我们的数据库。
注:其实你可以直接打开一个查询窗口,
输入
点击add account,添加用户,名且填入用户名密码后,点击apply。
成功添加用户之后,点击shema privileges选项卡,为用户授权。
点击Add Entry后,选择我们刚创建的shema:myballshop
OK之后,把能勾的钩子都勾上,完了Apply就好了~
双击打开
dc3f
/pre>
让我们改成这样:
对接MySQL
我们接下来,会用到MySQL数据库,在前面,我们已经安装好了,如果你还没有安装,请回到姜哥手把手教你做网站(2):环境搭建中安装好MySQL和Workbench再继续。创建数据库
打开MySQL Workbench,双击我们本地的数据库。如果你没有这个方块,可以点击上面的加号,添加一个:
输入安装时候填写的数据库密码,并且记住它~
在shema这里右击,选择create shema,然后按照我截图中的参数,填入信息,点击apply,创建我们的数据库。
注:其实你可以直接打开一个查询窗口,
输入
CREATE DATABASE myballshop DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;语句,执行以下即可。
创建用户并授权
点击management里面的users一栏:点击add account,添加用户,名且填入用户名密码后,点击apply。
成功添加用户之后,点击shema privileges选项卡,为用户授权。
点击Add Entry后,选择我们刚创建的shema:myballshop
OK之后,把能勾的钩子都勾上,完了Apply就好了~
安装pymysql
python对接mysql,需要一个驱动程序,这个程序,就是pymysql,安装也特别简单,用pip就好。还记得怎么用吗?再次打开一个黑屏的命令窗口,输入pip install pymysql回车就可以了。
配置我们的工程
准备工作都做好了,最后,我们要做的就是在我们的工程中,把这些配置都配好。双击打开
settings.py文件,找到DATABASE这一节,现在应该是这样的:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }<
dc3f
/pre>
让我们改成这样:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myballshop',#数据库名 'USER': 'myballshop',#数据库用户名 'PASSWORD': 'password',#数据库密码 'HOST': 'localhost', 'PORT': '3306', } }
然后打开和settings.py同目录下的__init__.py文件,加入两行:# coding=utf-8 import pymysql pymysql.install_as_MySQLdb()
现在看起来,应该像是这个样子:
让我们来尝试一下看,打开一个黑屏窗口,输入下面的命令,注意,没有命令提示符的,是系统给出的反馈提示,不用输入:C:\Users\djang>d: D:\>cd myBallShop D:\myBallShop>python manage.py makemigrations No changes detected D:\myBallShop>python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK
如果没有报错,说明,大家前面的步骤都成功了,恭喜大家咯~
如果报错,请大家尝试从几个方面寻找一下原因:数据库用户密码正确吗?授权完成了吗?大小写对吗?祝福大家都顺利~编辑模型对象
对接数据库的准备工作搞定了,这下可以编辑我们的模型对象了,我们是一个电子商店噢,最重要的模型就是商品,所以,今天,我么先定义商品模型。
双击models.py打开,输入以下的代码:from django.db import models class Product(models.Model): item_number = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name='商品编号') name = models.CharField(max_length=100, default='', db_index=True, verbose_name='商品名称') click_count = models.IntegerField(default=0, verbose_name='浏览次数') quantity = models.IntegerField(default=0, verbose_name='库存数量') price = models.FloatField(default=0.0, verbose_name='价格') market_price = models.FloatField(default=0.0, verbose_name='市场价') description = models.TextField(blank=True, verbose_name='详细描述') sort_order = models.IntegerField(default=0, verbose_name='排序序号') is_publish = models.BooleanField(default=False, verbose_name='上架') create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) def __str__(self): return self.name class Meta: verbose_name = '商品' verbose_name_plural = '商品'
通过以上的代码,我们定义了一个名称为Product的模型,我们总共用到了几种类型的字段:CharField,IntegerField,FloatField,TextField,BooleanField,DateTimeField,每一种字段类型分别对应一种mysql中的字段类型,具体对应关系,大家可以自行搜索其它相关资料,这里不赘述,因为并不重要,我们不需要关心这个对应关系,django会帮我们处理的很好。verbose_name是字段的中文名,等一下,我们再管理台中可以用到。
再解释下,这个类中的两个方法:def __str__(self): return self.name
这个方法,其实有点类似Java类中的toString()方法,也就是当外界调用这个类的某个对象时,默认返回的信息,举个例子:
上面这个Product类,有可能被实例化成一个篮球,或者更具体一点,是一个斯伯丁的篮球,也就是name字段的值是“斯伯丁篮球”。再具体一点,就是执行下述代码时,会输出 “斯伯丁篮球”p = Product(name='斯伯丁篮球') print(str(p))
而下面的这方法:class Meta: verbose_name = '商品' verbose_name_plural = '商品'
则是定义了这个类的中文名和复数名称,当然对中文来说,没有单复数的区别。
模型定义完了,根据我们以往的经验,肯定是要写一个建表的sql语句去mysql里建表了,这个过程好烦啊。确实很烦,但是我们现在用的django,再也没有这样的烦恼了!!!很神奇的事情即将发生,下面,我要打入两个我们这辈子都难以忘却的命令,当然,前面刚已经打过一遍了,当时还不觉得有多神奇,各位观众,请看:D:\myBallShop>python manage.py makemigrations Migrations for 'shop': shop\migrations\0001_initial.py: - Create model Product D:\myBallShop>python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, shop Running migrations: Rendering model states... DONE Applying shop.0001_initial... OK
在执行了makemigrations之后,我们发现系统提示,创建了一个叫Product的模型!紧接着执行migrate,就是把这个模型,创建到数据库中去!
注:如果这一步报错了,请大家看一下是不是提示了Access denied for user xxx,如果是这个错误,一定是你的用户名密码不对,请检查settings.py文件中的DATABASE的配置。
让我们到mysql workbench中去看看,是不是真的有了表:
果然有了,太赞了。。。。有了这样的功能,姜哥,写SQL的水平,真的是直线下降!!!
哟西,这个不错,让我们造点数据进去吧,哼哼,这下又可以用到django的另一个神器了!
django默认为每一个工程提供了一个简单的管理台,让我们先看看管理台长啥样,使用下面的命令启动程序,并且在浏览器中访问http://localhost:8000/admin/:D:\myBallShop>python manage.py runserver
在浏览器中出现了一个登陆页面,用户名和密码?我们没有啊,咋办?不要紧,只要一条python manage.py createsuperuser命令就可以搞定:D:\myBallShop>python manage.py createsuperuser Username (leave blank to use 'djang'): admin Email address: djangoworker@163.com Password: Password (again): This password is too common. Password: Password (again): Superuser created successfully.
根据提示,输入你要的用户名、邮件和密码,密码不能太简单。。。姜哥一开始想设一个叫password的密码,被django嫌弃了。。。OK了,去登陆下试试看吧。
登陆成功之后,可以看到,默认情况下,我们已经可以管理django的内建模型,Users和Groups,现在我们想要管理我们的自建模型Product,咋整?很简单,打开我们shop目录下的admin.py,输入以下代码:from django.contrib import admin from . import models class ProductAdmin(admin.ModelAdmin): list_display = ('item_number', 'name', 'quantity', 'price', 'market_price', 'create_time', 'update_time') ordering = ('-create_time',) admin.site.register(models.Product, ProductAdmin)
这里list_display的意思是在管理台的列表页面中,展示哪些字段。再来刷新一下管理台,出现我们的“商品”模型了!
再点进去看:
我们尝试ADD商品看看~
填入相关信息后,SAVE回到列表页,发现展示的字段,就是我们前面定义的那些字段。
太神奇了,一行代码没写,我们就有了这么一个方便的后台!再看看我们Mysql中的情况吧,右击我们的表,选择Select Rows - Limit 100,从右边的窗口,可以看到我们的数据已经被正确的记录在数据库里了。今日小结
今天我们建立了mysql数据库,配置了用户和权限;然后在我们的django工程中,建立了与数据库的连接,并且,建立了我们的第一个模型,叫Product,还利用django自带的管理台造了一条数据。做的工作可真不少。
好了,在结束一天的工作前,还是要把代码,提交到github进行保存噢。
今天开始,姜哥对提交代码的说明,会开始简单一些了,因为和前几天都是一样的,如果有问题,请大家参考前面几篇噢~$ cd /d/myBallShop $ git status $ git add . $ git commit -m"添加了模型" $ git push -u origin master
——————
姜哥的邮箱: djangoworker@163.com
姜哥的微信:
——————
相关文章推荐
- 姜哥手把手教你做网站(4):Hello,Django!
- 姜哥手把手教你做网站(1):技术选型
- 手把手教你用seq2seq模型创建数据产品(附代码)
- 姜哥手把手教你做网站(2):环境搭建
- PowerDesigner创建物理模型
- 电商系统中的商品模型的分析与设计
- 获取模型线的端点引用来创建标注
- Revit API 开发 (7): 创建模型线
- 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
- 手把手教你创建maven的web3.0项目
- [osgearth]通过API创建一个earth模型
- thinkphp5模型创建主意事项
- Entity Framework 6.x 学习之 - 创建带连接表的实体模型 with Database First
- MVC5 Entity Framework学习之创建Entity Framework数据模型
- 10-少年,玩模型吗?手把手教你statsmodels建模(1)
- 电商系统中的商品模型的分析与设计—续
- django创建用户后,修改了用户模型的操作
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 4、创建数据上下文和数据实体模型
- ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之二 joint 使用
- ROS学习(1)使用URDF创建机器人3D仿真模型