基于 Django 的手机管理系统实现过程详解


Posted in Python onAugust 16, 2019

一、概述

打算通过设计数据库,然后结合 Python 框架Django,实现在网页上对数据库的增删改查(本例以手机的管理为例,不考虑订购功能),有普通用户界面和管理员用户界面,普通用户只能做简单的查看需求,管理员用户可以实现对数据库内容的实时修改。

网站主体如下图:

基于 Django 的手机管理系统实现过程详解

二、设计数据库

根据业务需求,设计数据表,需要下列这些属性:

手机型号、品牌、手机描述、出厂年份、价格、照片、产地。

根据数据表设计原则,数据表设计需要满足基本的函数依赖和范式要求,因此我们将上述属性拆分为四张表格,并建立这些数据表之间的联系,相关的E-R 图如图所示:

(由于 Django 在建立每一个数据表的时候就会有一个内建的 id 作为主键,因此在此就不需要另外再设置主键字段)

基于 Django 的手机管理系统实现过程详解

此数据库字段由于是我从 sqlite 迁移到 MySQL 中,Django 自动帮我再生成的字段,所以有些字段名和我在 Django 写的字段不一致,但数据表关系还是一致的。

在 Django 中设计数据表相关代码如下:

from django.db import models

# Create your models here.

class Maker(models.Model):
 name = models.CharField(max_length=10)
 country = models.CharField(max_length=10)

 def __str__(self):
  return self.name

class PModel(models.Model):
 maker = models.ForeignKey(Maker, on_delete=models.CASCADE)
 name = models.CharField(max_length=20)
 url = models.URLField(default='http://i.imgur.com/OusiGB.png')

 def __str__(self):
  return self.name

class Product(models.Model):
 pmodel = models.ForeignKey(PModel, on_delete=models.CASCADE, verbose_name='型号')
 nickname = models.CharField(max_length=15, default='超值二手手机', verbose_name='摘要')
 description = models.TextField(default='暂无说明', verbose_name='暂无说明')
 year = models.PositiveIntegerField(default=2016, verbose_name='出厂年份')
 price = models.PositiveIntegerField(default=0, verbose_name='价格')

 def __str__(self):
  return self.nickname

class PPhoto(models.Model):
 product = models.ForeignKey(Product, on_delete=models.CASCADE)
 description = models.CharField(max_length=20, default='产品照片')
 url = models.URLField(default='http://i.imgur.com/z230eeq.png')

 def __str__(self):
  return self.description

在终端下执行以下指令,进行数据库的更新以及迁移操作,并创建管理员用户:

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

然后插入数据。

注意安装 Python 的 MySQL 驱动程序这块,刚开始安装 MySQL 官网提供的 mysql-python 这个模块,但在 Python3环境下会报错,原因是mysql-python 模块不支持 Python3版本,所以安装使用pymysql 模块。
注意在 models.py 文件同级文件中的init.py 修改为:

import pymysql
pymysql.install_as_MySQLdb()

操作便与 mysql-python 的使用方法一致了。

网站管理员登录界面:

基于 Django 的手机管理系统实现过程详解

管理员的增删改查界面:

基于 Django 的手机管理系统实现过程详解

三、设计网站

设计网站,在 Django 中增加 static 文件和 template 文件,套用相关模板和框架(这里运用了 bootstrap),编写 HTML 文件,调用数据库中的内容,设计的网站如下(即普通用户能查看的界面):

主页面:

基于 Django 的手机管理系统实现过程详解

商品详情界面:

基于 Django 的手机管理系统实现过程详解

四、总结

至此,一个简单的 手机管理系统就被我们实现出来了(Django + Bootstrap + MySQL),当然其中还存在中很多的不足,比如没有实现普通用户登录功能,HTML 页面写的也比较简陋,后续有时间会继续加以完善。
代码已上传至 GitHub:

https://github.com/weixuqin/myDjango/tree/master/test3

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web服务器Tornado使用小结
May 06 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
python3中的eval和exec的区别与联系
Oct 10 Python
python创建学生管理系统
Nov 22 Python
python 实现音频叠加的示例
Oct 29 Python
python 实现图片批量压缩的示例
Dec 18 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
python创建与遍历List二维列表的方法
Aug 16 #Python
python每天定时运行某程序代码
Aug 16 #Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 #Python
Python Web框架之Django框架Form组件用法详解
Aug 16 #Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 #Python
python禁用键鼠与提权代码实例
Aug 16 #Python
Python函数装饰器原理与用法详解
Aug 16 #Python
You might like
PHP中session变量的销毁
2014/02/27 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
详解php反序列化
2020/06/10 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
js 博客内容进度插件详解
2017/02/19 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python sys.path详细介绍
2013/10/17 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
Python Django路径配置实现过程解析
2020/11/05 Python
实习报告评语
2014/04/26 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
党员转正介绍人意见
2015/06/03 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python