姜哥手把手教你做网站(5):创建商品模型

在上一讲中,姜哥提到了两个重要的文件,那就是settings.py和models.py。一个用来定义我们的数据库连接,一个用来定义我们的数据模型。

对接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'),
    }
}

让我们改成这样:

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的内建模型,UsersGroups,现在我们想要管理我们的自建模型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
姜哥的微信:
这里写图片描述
——————

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值