场景编程集锦 - 快乐时光咖啡屋
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了场景编程集锦 - 快乐时光咖啡屋相关的知识,希望对你有一定的参考价值。
1. 场景描述
咖啡、可可和茶并称为世界著名的三大饮品。近十年来,咖啡倍受国人偏爱和追捧。因为咖啡文化与时尚生活、工作和休闲娱乐紧密地联系在一起,喝咖啡也似乎成为了小资生活与时尚生活的象征与标配。然而大部分中国人真正接受咖啡,并逐渐养成喝咖啡的习惯,不过是从星巴克进入中国后才开始的,至今也不过十几年的时间。咖啡馆不同于其他餐饮场所,自有其独特的魅力,由于其环境优雅,营造出放松的氛围,让处于快节奏工作和生活状态下的人们,可以借此放松身心、消除疲惫。咖啡馆避免了一些餐饮和饮品店的噪杂,所以它成为了人们聚会、洽谈生意、闲暇小憩和男女约会的理想之地,甚至成为一些人打发休闲时光的一个好去处。现代社会,人们进出咖啡馆不仅是一种消费行为,也参杂了社交、商务等需求,成为人们生活中的另一个空间。 正因如此,在城市商圈或者写字楼周边,咖啡店犹如雨后春笋随处可见,快乐时光咖啡屋就是其中之一。这是一家连锁的咖啡屋,在全国拥有20多家连锁店,具有强大的美誉度和良好的口碑。其特色之一就是其官网上推荐的营销活动:“特价咖啡天天喝”。每一天都有一款打折咖啡,但是工作日和周末的打折力度不同。这个活动受到众多年轻消费者的青睐。本案例中我们将通过Python开发一个WEB网站程序,再现“特价咖啡天天喝”的营销活动场景。
2. 编程思路
快乐时光网站要实现的核心功能就是根据工作日和周末,在网站上展示不同的咖啡价目单。
2.1 开发工具
Python提供了多种网站Web程序开发的解决方案,主流的开发工具有Flask和Django。Django适合大型网站开发,而Flask则对于小型WEB程序开发更加简洁和灵活。结合本案例的实际需要,我们选择Flask来开发快乐时光咖啡屋的网站程序更为恰当。
2.2 程序构成
我们的快乐时光网站由3个部分构成: 后台服务器程序:定义路由和试图函数,判断工作日和周末,生成不同的咖啡价目表。 模板程序:前端展示的网站页面,它包含支持Jinjia2的模板语句,实现动态数据的加载。我们需要创建目录templates,存放网站的模板文件。 静态资源:包含网站的图片文件、CSS网页格式文件。我们需要创建目录static存放网站静态资源,其下创建子目录images保存图片文件,创建子目录存放css文件。 有了以上的程序规划,我们就可以进行网站程序的编码工作了。
3. 程序代码
3.1 服务器程序 joytime.py
"""
joytime.py : 欢乐时光咖啡屋
"""
from flask import Flask, render_template
import datetime
joy_menus = [
(Cappuccino, 卡布诺奇, 32),
(Vanilla Latte, 香草拿铁, 35),
(Caramel Macchiato, 焦糖玛奇朵, 34),
(Latte, 拿铁, 30),
(Americano, 美式咖啡, 25),
(Mocha, 摩卡, 33),
(Brewed Coffee, 新鲜调制咖啡, 20)
] # ①
DISCOUNT = 0.85
app = Flask(__name__)
@app.route(/) # ②
def index(): # ③
today = datetime.datetime.now()
t_visit = today.strftime(%Y-%m-%d %H:%M:%S %A) # ④
menus = []
weekend = 0
if today.weekday() >= 5: # ⑤
for item in joy_menus:
menus.append((item[0], item[1], int(item[2]*DISCOUNT))) # ⑥
weekend = 1
else:
menus = joy_menus
return render_template(joytime.html, today=t_visit, menus=menus, weekend=weekend) # ⑦
if __name__ == __main__:
app.run() # ⑧
重要语句说明: 语句①定义菜单列表,列表元素是一个元组,包括咖啡英文名称,中文名称和价格。 语句②定义路由,代表在浏览器中访问:localhost:5000,将执行视图函数index()。 语句③定义视图函数index()。 语句④将当前日期转换成字符串。 语句⑤判断今天是否是周末。 语句⑥动态创建咖啡价目表。 语句⑦渲染模块,实现动态页面展示。 语句⑧启动快乐时光的后台服务程序。
3.2 模板文件:joytime.html
<!—joytime.html 模板文件 -->
<!doctype html>
<html>
<head>
<meta charset=utf-8/>
<title>快乐时光咖啡屋</title>
<link rel="stylesheet" href="url_for(static,filename=css/joytime.css/)" />
</head>
<body>
<div id="header">
Welcome to Joy Time
</div>
<div id="nav">
<ul>
<li>Home</li>
<li>Members</li>
<li>About</li>
<li>Join Us</li>
</ul>
</div>
<div id="section">
<img src="url_for(static,filename=images/joytime.png/)"
width=1300 height=300 alt=coffee picture/>
</div>
<div id="visit">
% if weekend==1 %
<h2>Today specials</h2>
% endif %
<p>Date: today</p>
</div>
<div id="item">
<ul>
% for item in menus %
<li>item[1] </li>
% endfor %
</ul>
</div>
<div id="price">
<ul>
% for item in menus %
<li>...... ¥item[2]</li>
% endfor %
</ul>
</div>
<div id="footer">
<p>©Copyright : Joytime.com.cn</p>
</div>
</body>
</html>
3.3 css格式文件
/* joytime.css : 欢乐时光咖啡屋 */
body
background-color: linen;
li
list-style: none;
#header
background-color: black;
color: white;
text-align: center;
padding: 5px;
#nav
line-height: 35px;
background-color: #dddddd;
color: #700505;
height: 300px;
width: 150px;
float: left;
padding: 5px;
#section
width: 1100px;
float: left;
padding: 5px;
text-align: center;
#visit
clear: both;
float: left;
margin-left: 680px;
text-align: center;
#item
width: 200px;
clear: both;
float: left;
padding: 5px;
margin-left: 630px;
line-height: 30px;
#price
width: 500px;
float: left;
padding: 5px;
line-height: 30px;
#footer
background-color: black;
color: white;
clear: both;
text-align: center;
padding: 5px;
3.4 网站图片文件:joytime.png
图片效果如下:
4. 执行效果
4.1 环境安装
快乐时光网站运行,需要安装Flask第三方开发库。你可以在Windows的命令行窗口中执行以上命令: pip install flask -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
4.2 程序执行
第一步启动后台服务器程序:
D:\\cases\\快乐时光咖啡屋>python joytime.py
* Serving Flask app joytime
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
第二步使用浏览器访问网站:127.0.0.1:5000或者localhost:5000,你将看到如下结果: 至此,大功告成。我们已经完成了快乐时光咖啡屋官网程序的开发。应该说这是一个功能非常简单的网站程序,但对于WEB网站开发的初学者来说,这是一个很好的起点,作为一个练手项目,是一个良好的开端。
5. 程序优化
我们建议对joytime.py进行两个方面的优化工作。具体说来就是: 1.咖啡价目表是以硬编码的方式写入程序,如果咖啡价格调整,我们需要手动修改程序,这种程序与数据构成方式我们称之为紧耦和; 2. 这一版程序目前仅实现了周末咖啡打折,并没有完全实现天天打折的业务需求。 为了解决以上两个问题,可有以下的解决方案。一是将咖啡价目表joy_menus列表内容以文本文件形式存放,在程序启动后进行一次性加载,实现程序与数据的分离;二是进一步优化视图函数index(),在条件分支语句中,针对今天是工作日的情况,随机选择一种咖啡打85折,以真正兑现“特价咖啡天天喝”这个庄严的营销承诺。具体工作如下:
5.1 咖啡价目表保存
将咖啡价目表保存到文本文件coffee_menu.txt中,内容如下:
Cappuccino 卡布诺奇 32
Vanilla Latte 香草拿铁 35
Caramel Macchiato 焦糖玛奇朵 34
Latte 拿铁 30
Americano 美式咖啡 25
Mocha 摩卡 33
Brewed Coffee 新鲜调制咖啡 20
每行数据代表一种咖啡,包含咖啡英文名称、咖啡中文名以及咖啡价格等三项数据,数据项之间使用tab键进行分隔。文件以UTF-8格式保存。你可以使用Windows notepad对这个文件进行编辑和修改。
5.2 在joytime.py模块中新增函数load_menu()
这个函数的主要作用是读取咖啡价目表文本文件。内容如下所示:
def load_menu(fname):
"""
加载咖啡价目表内容
"""
joy_menus = []
with open(fname, encoding=utf8) as infile:
lines = infile.readlines()
for line in lines:
items = line.strip().split(\\t)
joy_menus += [(items[0], items[1], int(items[2]))]
return joy_menus
这个函数load_menu(fname)能够方便地将coffee_menu.txt读入一个Python的列表,列表的每一个元素是一个元组,其中包含了包含咖啡英文名称、咖啡中文名以及咖啡价格等内容。
5.3 修改joytime.py相关内容
"""
joytime.py : 欢乐时光咖啡屋
"""
from flask import Flask, render_template
import datetime
def load_menu(fname): # ①
"""
加载咖啡价目表内容
"""
joy_menus = []
with open(fname, encoding=utf8) as infile:
lines = infile.readlines()
for line in lines:
items = line.strip().split(\\t)
joy_menus += [(items[0], items[1], int(items[2]))] # ②
return joy_menus
fname = coffee_menu.txt
joy_menus = load_menu(fname) # ③
DISCOUNT = 0.85
app = Flask(__name__)
@app.route(/)
def index():
today = datetime.datetime.now()
t_visit = today.strftime(%Y-%m-%d %H:%M:%S %A)
menus = []
weekend = 0
if today.weekday() >= 5:
for item in joy_menus:
menus.append([item[0], item[1], int(item[2]*DISCOUNT)])
weekend = 1
else:
for item in joy_menus: # ④
menus.append([item[0], item[1], item[2]])
numbers = len(menus)
idx = today.weekday() % numbers # ⑤
menus[idx][-1] = int(menus[idx][-1]*DISCOUNT) # ⑥
return render_template(joytime.html, today=t_visit, menus=menus, weekend=weekend)
if __name__ == __main__:
app.run()
重要语句说明如下: 语句①定义加载咖啡价目表的函数; 语句②构建咖啡价目表的列表项; 语句③执行函数以从文本文件coffee_menu.txt读入咖啡价目表; 语句④循环体完成列表的内容复制,当然这个循环你也可以使用列表推导式代替; 语句⑤工作日选取一种咖啡打折,这里的idx代表某种咖啡在列表menus中的序号; 语句⑥对打折咖啡的价格进行进行调整。 以上就是程序优化部分的全部内容和代码实现。
以上是关于场景编程集锦 - 快乐时光咖啡屋的主要内容,如果未能解决你的问题,请参考以下文章