(坚持每一天, 就是成功)
Python Django web 框架, Django 是一个开放源代码的 Web 应用框架, 由 Python 写成. 采用了 MTV 的框架模式, 即模型 M, 模板 T 和视图 V 组成.
安装 Python 和 Django 可以自己查阅资料 此文均在 Pycharm 下进行需要下载可加群: 607021567 找群主, 本文主要介绍电商产品. 所以可自行学习, 创造自己的网站.
1,Django 架构设计:
Django 是一个基于 https://baike.baidu.com/item/MVC 构造的框架. 但是在 Django 中, 控制器接受用户输入的部分由框架自行处理, 所以 Django 里更关注的是模型 (Model), 模板(Template) 和视图(Views), 称为 MTV 模式. 它们各自的职责如下:
层次 | 职责 |
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板 (Template),即业务逻辑层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
视图(View),即表现层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
2, 工作机制:
(这里的文件顺序或包含文件夹并不相同, 我是为了介绍各个文件, 所以拼接到一起.)
1. 用 manage .py runserver 启动 Django 服务器时就载入了在同一目录下的 settings .py. 这里的 settings.py 文件内包含着数据库信息的设置, 静态文件的设置, 静态文件指 (js,CSS,html,images) 等, settings.py 文件是我们 django 框架的核心文件之一. 该文件包含了项目中的配置信息, 如前面讲的 URLConf 等, 其中最重要的配置就是 ROOT_URLCONF, 它告诉 Django 哪个 Python 模块应该用作本站的 URLConf, 默认的是 urls .py.
2. 当访问 url 的时候, Django 会根据 ROOT_URLCONF 的设置来装载 URLConf.
3. 然后按顺序逐个匹配 URLConf 里的 URLpatterns. 如果找到则会调用相关联的视图函数(index.py), 并把 HttpRequest 对象作为第一个参数(通常是 request)(函数的参数是 request).
4. 最后该 view 函数负责返回一个 HttpResponse 对象(html 网页).
这里的核心文件已经介绍完, 剩下的文件可以在我们熟悉 django 框架后在认识, 所以不一一介绍了!
3, 部署:
Django 可以运行在 https://baike.baidu.com/item/Apache , https://baike.baidu.com/item/Nginx 上, 也可以运行在支持 https://baike.baidu.com/item/WSGI , https://baike.baidu.com/item/FastCGI 的服务器上. 支持多种数据库, 已经支持 https://baike.baidu.com/item/Postgresql ,MySql, Sqlite3, https://baike.baidu.com/item/Oracle .Google App Engine https://baike.baidu.com/item/Google App Engine 也支持 Django 的某些部分, 国内支持的平台有 (SAE)Sina App Engine,(BAE) 百度应用引擎.
4, 管理文件夹
接下来介绍核心文件夹, 这里是分类清楚我们的文件该怎么去管理:
(一), 这里的文件夹名字可以自己任意去命名, 第一行是我们的 django 项目的主文件夹名字, 默认主文件夹下可以自己创建自己的 py 文件的文件夹, 不过 pycharm 自动创建了 py 文件的文件夹, 命名规则是以主文件夹命名.
(二), 第二行就是我们的 py 文件所在的文件夹, 这些 py 文件主要是我们操作前端到后台所需要的.
(三), 第三行为我们的静态文件目录包含 ---:Js,Css,Html,img,fonts 等文件
(四), 第四行主要是我们的 Html 模板文件目录, 这里存放我们的主页, 后台管理页的 html 文件.
(五),manage.py 启动文件
5, 电商项目 -- 产品数据, 后台管理
电商项目用户部分: 主要分为三大类 --1, 用户浏览商品 ,2, 购买商品 ,3, 管理订单
电商项目管理部分: 主要也为三大类 --1, 商品数据整合网站 ,2, 接受用户信息数据存入后台(注册和管理),2, 处理用户订单问题
分析到这里首先进行电商管理部分, 商品数据整合 --SqlServer + Django:
首先我们需要创建连接数据库 py 文件 --dataas.py:
- class oneic_settings:
- MSSQL_INFO = {"hostname":"xxx","username":"xxx","password":"xxx","dbname":"xx"}
接下来创建对数据库详细操作的 py 文件 --data_db.py:
- from dataas import oneic_settings
- def mssqlserver_conn_db():
- try:
- #strconn= 'DSN=test;uid='+oneic_settings.MSSQL_INFO.get("username")+';PWD='+oneic_settings.MSSQL_INFO.get("password")
- strconn= 'DRIVER={SQL Server};SERVER='+oneic_settings.MSSQL_INFO.get("hostname")+';DATABASE='+oneic_settings.MSSQL_INFO.get("dbname")+';UID='+oneic_settings.MSSQL_INFO.get("username")+';PWD='+oneic_settings.MSSQL_INFO.get("password")
- db = pyodbc.connect(strconn)
- return db
- except Exception,e:
- print e
这里首先使用准备好的 sql 文件, 就是我们的详细数据文件.
6, 电商项目 -- 后台部分
1, 网站首页各个页面的 html 模板, 这里的模板就是需要各位自己去创造了, 这里需要储备前端的基础知识, 包括: JS,CSS,HTML 基础技能, 也可直接下载现成的模板.
2, 管理静态文件 --settings.py:
- TEMPLATE_DIRS = (
- 'E:/Oneic_new/Oneic_new',
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- )
- STATIC_URL = 'E:/Oneic_new/static/'
- STATIC_ROOT = 'E:/Oneic_new/static/'
- TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)
这里主要修改 STATIC_URL 和 STATIC_ROOT 文件.
3, 策划 url.py 文件 -- 控制网页首页显示:
- from django.conf import settings
- (r'^static/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}),
- url(r'^admin/', include(admin.site.urls)),
- url(r'$','Oneic_new.index.new_html')
这写代码除了 3 行, 剩余是我需要添加的代码, 第 2 行就是静态文件的部署, 4 行是 django 所要找到 url 的位置.
4, 处理数据传入操作 --index.py:
- import common
- import sms
- from uc import getShopCart,checkLogin
- def basicinfo(request):
- logininfo = checkLogin(request)
- if logininfo and logininfo.get('loginuserid') != None and logininfo.get('loginuserid')!="":
- userdata={}
- if logininfo.get('usertype') == None or logininfo.get('usertype') == ""or logininfo.get('usertype') =="0":
- return HttpResponseRedirect('/selectType.html')
- mssql_conn = common.mssqlserver_conn_db()
- cs = mssql_conn.cursor()
- cs.execute("{call sp_member_Allinfo_get_py (?)}", logininfo.get('loginuserid'))
- q = cs.fetchone()
- cs.commit()
- if (q and len(q)> 0):
- if q[0] != 0:
- userdata['mp'] = q[1]
- userdata['realname'] = q[2]
- userdata['corname'] = q[3]
- userdata['tel'] = q[4]
- userdata['fax'] = q[5]
- userdata['pos'] = q[6]
- userdata['userType'] = q[7]
- userdata['userLevel'] = q[8] if q[8] else '' userdata['userClass'] = q[9] if q[9] else''
- userdata['province'] = q[10] if q[10] else '' userdata['city'] = q[11] if q[11] else''
- userdata['district'] = q[12] if q[12] else '' userdata['address'] = q[13] if q[13] else''
- userdata['RegTime'] = q[14].strftime('%Y-%m-%d %H:%M:%S') if q[14] else '' userdata['LastLoginTime'] = q[15].strftime('%Y-%m-%d %H:%M:%S') if q[15] else''
- userdata['LastLoginIP'] = q[16] if q[16] else '' userdata['LoginCount'] = q[17] if q[17] != None else''
- userdata['Email'] = q[18] if q[18] else '' userdata['lottery_num'] = q[19] if q[19] != None else 0
- userdata['integral_num'] = q[20] if q[20] != None else 0
- userdata['po_num'] = q[21] if q[21] != None else 0
- userdata['work_order_num'] = q[22] if q[22] != None else 0
- userdata['rfq_num'] = q[23] if q[23] != None else 0
- logininfo['userdata'] = userdata
- cs.close()
- mssql_conn.close()
- return render_to_response('index.html',logininfo)
- else:
- return HttpResponseRedirect('/signin')
这里包含 cookie 检测: checkLogin.py 文件 --cookie 检测. logininfo-- 为我们需要的数据就是要在网页中显示的数据.
- checkLogin.py:
- from django.conf import settings
- #检测是否登录
- def checkLogin(req):
- edition_id = settings.SESSION_CSSID
- eny_email = req.COOKIES.get(settings.SESSION_COOKIE_MAIL,'')
- eny_mp = req.COOKIES.get(settings.SESSION_COOKIE_MP,'')
- eny_userid = req.COOKIES.get(settings.SESSION_COOKIE_UID,'')
- eny_usertype = req.COOKIES.get(settings.SESSION_COOKIE_UTYPE,'')
- cartlist = getShopCart(req)
- login_info = {"cartlist":cartlist,"cartnum":len(cartlist),"loginemail":"","loginuserid":"","loginmp":"","usertype":"","css_id":edition_id}
- if eny_email != "":
- login_info['loginemail'] = DES.decrypt(str(eny_email))
- if eny_usertype:
- login_info['usertype'] = DES.decrypt(str(eny_usertype)) #DES 为加密的 py 文件, 可以自己随便写!
- if eny_userid != "":
- login_info['loginuserid'] = DES.decrypt(str(eny_userid))
- cartnum = getShoppcartNum(login_info.get('loginuserid'))
- login_info['cartnum'] = cartnum
- if eny_mp != "":
- mphone = DES.decrypt(str(eny_mp))
- enymp = []
- mp=list(mphone)
- for i in range(0,len(mp)):
- if i>2 and i<7:
- mp[i]=chr(42)
- enymp.append(mp[i])
- else:
- enymp.append(mp[i])
- eny_Mp = ''.join(enymp)
- login_info['loginmp'] = eny_Mp
- login_info['mp'] = DES.decrypt(str(eny_mp))
- return login_info
这里是后台基本完成的项目了之一! WEB 的是需要一步一步去扩建, 所以我只是介绍一下我们日常项目的简单介绍, 如果又不太详细的可加群!
7, 电商项目 -- 前端构造:
这里 JS,CSS 我不去解释了, 因为他们是前端的基础应用, 其中与 python 密切结合的是 html:
所以我简单介绍一下在 html 文件中怎么去应用我们后台传入的数据:
1, 值传入:
- ,<link rel="stylesheet" type="text/css" href="/css/www_style.css?v={{ css_id }}" />
- ,<div><p>{{参数}</p></div>
这里的值与参数都是 "{{ 参数 }}" 两个大括号嵌入的.
2, 判断 -- 可直接在 html 中写 if else 语句:
- {% if condition %}
- ... display
- {% endif %}
- or
- {% if condition1 %}
- ... display 1
- {% elif condition2 %}
- ... display 2
- {% else %}
- ... display 3
- {% endif %}
这里的用法和 python 文件中用法无异.
3, 嵌入网页:
1 {% include 'template/footer.html' %}
一定要写路径.
至此, 总体电商项目初入门介绍完毕, 剩下的就是需要自己来创造其它的管理层页面. 加油! 之后也许继续会出多层次界面的介绍, 请期待!
来源: https://www.cnblogs.com/zhuPython/p/9274755.html