美文网首页python_Web
基于Python语言Django框架的商品管理系统

基于Python语言Django框架的商品管理系统

作者: hehuijun | 来源:发表于2017-09-01 12:48 被阅读2000次

    前言

    应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助Chrome等浏览器来运行。WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。B/S结构能够很好地应用在广域网上,成为越来越多的企业的选择。

    一个Web应用程序是由完成特定任务的各种Web组件(web components)构成的并通过Web将服务展示给外界。在实际应用中,Web应用程序是由多个模型(model)-视图(view)-控制器(controller)等组织起来的代码组成,这些组件相互协调为用户提供一组完整的服务。

    Web应用程序对企业的重要用途是对数据进行处理,管理信息系统(Management Information System,简称MIS)就是这种架构最典型的应用。MIS可以应用于局域网,也可以应用于广域网。基于Internet的MIS系统以其成本低廉、维护简便、覆盖范围广、功能易实现等诸多特性,得到越来越多的应用。

    本文就是尝试利用Python语言实现商品管理系统,增强对Web应用系统需求、设计、开发的知识和能力。

    1绪论

    Python已经有将近30年的历史,在过去30年中,Python在运维工程师和数据科学家群体中受到广泛欢迎,然而却极少有企业将Python作为生产环境的首选语言。在最近几年,这一情况有所改变。随着云计算、大数据以及人工智能技术的快速发展,Python及其开发生态环境正在受到越来越多的关注。

    互联网时代来临后,Python被用来在Web开发领域进行尝试,涌现出了一批基于Python开发一些WEB的网站,还有不少大型的、基于Python的网站,比如Youtube、豆瓣等网站。使得一些Web开源框架迅速成长,如Django、Flask等,为程序员高效开发Web程序提供了巨大的帮助。

    进入了云计算时代,基于过去一段时间Python在系统管理工具的积累,以及其本身具备了非常好的系统集成能力,Python在云计算领域可以说大放异彩。最著名的是Python开发的Openstack。不仅在私有云领域,在公有云领域,包括AWS,包括Google云,当这些公有云提供出SDK的时候,它们首选的技术路线依然是Python。

    最近两年又火起来的人工智能领域,Python靠着过去多年在科学计算等方面的积累出现了大爆发。比如图像识别用的都是Python OpenCV库。在深度学习领域几乎没有任何其他语言可以跟Python相提并论的,比如Caffe,Theano,TesnorFlow,Keras这些非常流行的深度学习框架,都是以Python为主要开发语言。事实证明了在深度学习领域目前Python是处于非常主导的地位。

    如上所述,为了能跟上人工智能的潮流,从用户体验角度,从开发者角度来讲,Python是更好的语言,也是更好的接口语言,值得我们学习和掌握它。另一方面,考虑到可以用Python集成各种各样的服务,这样能有效降低成本,同时也能够减轻自己开发团队的压力,让开发团队能够减少一些学习成本。

    2Django

    Django是Python中目前风靡的Web Framework,框架能够帮助我们把程序的整体架构搭建好,而我们所需要做的工作就是填写逻辑,而框架能够在合适的时候调用你写的逻辑,而不需要我们自己去调用逻辑,让Web开发变的更敏捷.

    Django是一个高级Python Web框架,鼓励快速,简洁,以程序设计的思想进行开发.通过使用这个框架,可以减少很多开发麻烦,使你更专注于编写自己的app,而不需要重复造轮子. Django免费并且开源。

    2.1Django特点

    1)完全免费并开源源代码。

    2)快速高效开发。

    3)使用MTV架构(熟悉Web开发的应该会说是MVC架构)。

    4)强大的可扩展性。

    2.2Django工作方式

    用户在浏览器中输入URL后的回车,浏览器会对URL进行检查,首先判断协议,如果是http就按照Web来处理,然互调用DNS查询,将域名转换为IP地址,然后经过网络传输到达对应Web服务器,服务器对url进行解析后,调用View中的逻辑(MTV中的V),其中又涉及到Model(MTV中的M),与数据库的进行交互,将数据发到Template(MTV中的T)进行渲染,然后发送到浏览器中,浏览器以合适的方式呈现给用户。

    图2-1工作方式

    2.3开发环境

    本文使用的主要开发环境为:

    1)操作系统:macOS Sierra 10.12.4

    2)开发语言:Python 3.6.1

    3)Web框架:Django1.11.1

    4)数据库:SQLite3

    5)前端框架:Bootstrap3.3.7

    6)开发IDE:PycharmCE 2017.1

    7)虚拟环境:Anaconda 4.3.17

    8)版本管理:GitHub

    2.4安装Django

    使用终端安装最新版的Django:

    conda

    install Django

    2.5Bootstrap安装

    Bootstrap,来自Twitter,是目前最受欢迎的前端框架。Bootstrap是基于HTML、CSS、JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷。

    从官网下载所需资源,稍后复制到开发目录中:

    http://getbootstrap.com/getting-started/#download

    图2-2

    BootStrap目录

    3主要功能

    3.1功能设计

    主要功能和设计考虑如图3-1所示:

    3.2主要界面

    3.2.1首页

    3.2.2所有商品(分页)

    3.2.3商品详情

    3.2.4管理员登录页

    3.2.5商品管理页

    3.2.6商品添加页面

    4代码实现

    从现在开始正式的进入代码阶段,简述开发过程。

    4.1创建项目

    我们创建一个名为WebStore的Django项目,创建项目的指令[1](终端)如下:

    django-admin.py

    startproject WebStore

    文件结构如下:

    WebStore

    ├── manage.py

    └── WebStore

    ├── __init__.py

    ├── settings.py

    ├── urls.py

    └── wsgi.py

    4.2设置数据库

    DATABASES = {

    'default': {

    'ENGINE':    'django.db.backends.sqlite3',

    'NAME': os.path.join(BASE_DIR,    'db.sqlite3'),

    }

    }

    Django项目建成后,就可以设置数据库了。本文默认使用SQLite数据库,在WebStore/WebStore/setting.py中可以查看和修改数据库设置:

    还可以设置其他数据库,如MySQL, PostgreSQL,现在为了便于发布和提供老师审核,使用默认数据库设置。

    4.3设置国际化

    LANGUAGE_CODE = 'zh-hans'

    TIME_ZONE = 'Asia/Shanghai'

    USE_I18N = True

    Django支持国际化,多语言。Django的国际化是默认开启的,如果不需要国际化支持,可以在设置文件中设置USE_I18N = False,那么Django会进行一些优化,不加载国际化支持机制。在WebStore/WebStore/setting.py修改默认的语言和时区。

    4.4配置静态文件

    静态文件是指网站中的js,css,图片,视频等文件,通常在WebStore/WebStore/setting.py中已经设置好了。在WebStore根目录下创建static文件夹,在static下再创建upload、css、js、image等目录。

    STATIC_URL = '/static/'

    STATICFILES_DIRS = [

    os.path.join(BASE_DIR, "static"),    '/Users/alexmac/Library/Mobile\    Documents/com\~apple\~CloudDocs/DEV/WebStore/static/',#物理路径

    ]

    4.5创建Django app

    在Django中的app被认为是一个功能模块,与其他的web框架可能有很大的区别,将不通功能放在不同的app中,方便代码的复用。在WebStore目录下,终端输入创建app指令:

    python

    manage.py startapp commodity

    WebStore根目录下,文件结构如下:

    ── commodity

    │ ├── __init__.py

    │ ├── admin.py

    │ ├── migrations

    │ │ └── __init__.py

    │ ├── models.py

    │ ├── tests.py

    │ └── views.py

    ├─db.sqlite3

    ├─manage.py

    ├─WebStore

    ├── __init__.py

    ├── settings.py

    ├── urls.py

    必须在WebStore/WebStore/setting.py下添加新建app

    INSTALLED_APPS = (

    ...

    'commodity', #这里填写的是app的名称

    )

    4.6创建models

    在WebStore/commodity/models.py下编写如下程序:

    class    Commondity(models.Model):

    CommodityName =    models.CharField('商品名称', max_length=100)

    CommodityCategory =    models.CharField('商品类别', max_length=50,    blank=True)

    CommodityPrice =    models.DecimalField('商品价格', max_digits=11,    decimal_places=2)

    CommondityImage =    models.ImageField('商品图片', upload_to='static',    default='static/upload/None/no-img.jpg')

    CommodityDateTime =    models.DateTimeField('登记日期', auto_now_add=True)

    CommodityContent = models.TextField('商品说明', blank=True, null=True)

    CommondityContactMobile =    models.CharField('联系电话', max_length=11,    blank=True, null=True)

    def __str__(self):

    return    self.CommodityName#一般系统默认使用来表示对象,通过这个函数可以告诉系统使用CommodityName字段来表示这个对象

    class Meta:

    verbose_name = '商品' #给模型起个更好听的名字,这儿相当于进行了汉化。

    verbose_name_plural = '所有商品'

    #按时间下降排序

    ordering =    ['-CommodityDateTime']

    4.7运行程序

    在WebStore根目录下,用终端命令行输入以下指令:

    $ python    manage.py runserver#启动Django中的开发服务器

    启动浏览器,输入http://127.0.0.1:8000/,就可以访问网站了。

    4.8同步数据库

    在WebStore根目录下,用终端命令行输入以下指令:

    python

    manage.py migrate #同步在model中建立的数据库

    如果对model进行了修改,需要先执行一次makemigrations命令,再执行migrae。

    python

    manage.py makemigrations #先检查更新

    4.9设置Admin

    Django有一个优秀的特性,内置了Django admin后台管理界面,方便管理者进行添加和删除网站的内容.新建的项目系统已经为我们设置好了后台管理功能,可以在WebStore/WebStore/setting.py中查看。

    在WebStore/commodity/admin.py中增加代码,让后台管理界面能对“商品”信息进行管理。默认管理界面中仅显示上面这是的“CommodityName”,为更方便的在后台管理信息,需要增加一些一些代码。具体的如下:

    from    django.contrib import admin

    from commodity.models    import Commondity

    class    AdminCommondity(admin.ModelAdmin):

    list_display =    ('CommodityName','CommodityCategory','CommodityPrice','CommodityDateTime')#后台显示的列表内容

    search_fields = ('CommodityName',    'CommodityCategory',)#从哪些字段中搜索

    list_filter =    ('CommodityCategory','CommodityDateTime',)#筛选器

    admin.site.register(Commondity,AdminCommondity)

    4.10创建超级用户

    初次登陆后台管理界面,需要使用如下命令账号创建超级用户:

    python

    manage.py createsuperuser

    按照提示输入用户名、邮箱、密码,创建第一个超级用户。

    4.11编写template

    在commodity目录下创建template目录,在template下增加base.html,做为本文程序的基础模版。模版样式采用Bootstrap样式表。

    4.12编写首页和商品展示页(模板)

    用{% extends "base.html" %}引入模版页面,增加需要展示商品的相关代码。

    首页为index.html。<代码见附录>

    商品展示页为post.html。<代码见附录>

    4.13完善Views

    通常访问网页程序的逻辑是:request进来->从服务器获取数据->处理数据->把网页呈现出来,Django也是按照这个流程来处理信息的,它使用url和views来处理:

    1)url设置相当于客户端向服务器发出request请求的入口,并用来指明要调用的程序逻辑.

    2)views用来处理程序逻辑,然后呈现到template(一般为GET方法, POST方法略有不同)。

    3)template一般为html+CSS的形式,主要是呈现给用户的表现形式。

    Django中views里面的代码就是一个一个函数逻辑,处理客户端(浏览器)发送的HTTPRequest,然后返回HTTPResponse。我们在WebStore/commodity/views.py中编写简单的逻辑:

    from    django.http import HttpResponse

    from    commodity.models import Commondity

    from    datetime import datetime

    from    django.http import Http404

    from    django.shortcuts import render

    from    django.core.paginator import PageNotAnInteger, Paginato

    def

    list(request):#系统默认的Paginator

    limit = 3#每页显示的记录数

    post_list = Commondity.objects.all()#获取全部对象

    paginator = Paginator(post_list,    limit)#实例化一个分页对象

    page = request.GET.get('page')#获取页码

    try:

    post_list =    paginator.page(page)#获取某页对应的记录

    except PageNotAnInteger:#如果页码不是个整数

    post_list = paginator.page(1)#取第一页的记录

    except EmptyPage:#如果页码太大,没有相应的记录

    post_list =    paginator.page(paginator.num_pages)#取最后一页的记录

    return render(request,'list.html',    {'post_list': post_list})

    def    index(request):

    post_index = Commondity.objects.all()[:8]#获取全部对象,仅显示前8条数据

    return    render(request,'index.html',{'post_index':post_index})

    def    detail(request, id):

    try:

    post =    Commondity.objects.get(id=str(id))

    except Commondity.DoesNotExist:

    raise Http404

    return render(request, 'post.html',    {'post': post})

    4.14实现分页(模板)

    用{% extends "base.html" %}引入模版页面,增加需要展示商品的相关代码。

    在views.py中使用pagination,实现简单分页。<代码见附录>

    商品展示页为post.html。<代码见附录>

    4.15完善url

    如何使这个逻辑在http请求进入时,被调用呢,这里需要WebStore/WebStore/urls.py中进行url设置,设置了访问主页(list.html)和商品详情页面(post.html)。代码如下:

    from    django.conf.urls import url,include

    from    django.contrib import admin

    from

    commodity import views #1.8以上新的写法

    urlpatterns    = (

    url(r'^admin/', admin.site.urls),

    url(r'^$',    views.index,name='index'),# alex:1.8以上新的写法

    url(    r'^(?P\d+)/$',views.detail, name='detail'),

    url(r'^list/$',views.list),

    )

    参考文献

    Django官方网站:https://docs.djangoproject.com/en/1.11/

    Django基础教程:http://code.ziqiangxuetang.com/django/django-tutorial.html

    [1]在windows下可以使用django-admin

    startproject WebStore的命令,无py后缀。

    相关文章

      网友评论

        本文标题:基于Python语言Django框架的商品管理系统

        本文链接:https://www.haomeiwen.com/subject/vyoztttx.html