使用 python flask 框架实现一个简单的抽奖系统
Flask 实现一个简易的抽奖系统
项目前置知识
目前 python主流的框架: Django 、flask 、Tornado

简介:
1.框架
框架? 为什莫使用框架? (前置知识讲解比较冗杂,望谅解)
框架:英文名为 (Framework),意思是框架、机制、基准。最高源于建筑行业,现在框架这个概念使用十分广泛,尤其是在软件行业。 在软件工程中,框架被定义为整个或部分系统的可重用设计,表现为一组可重用设计,是可被应用开发者定制的骨架。
通俗来说,一个框架是实现某种功能或者是项目的半成品,提供了一些常用的工具和一些基础通用的组件,可以使开发人员在此基础上,更高效的实现业务需求的设计。“使用框架,可以使开发者重复造轮子,而是直接调用其类或者函数就可以实现需求的功能 ”
举个例子帮助大家理解,相信大家日常生活都了解过ppt。我们来看一下ppt的使用逻辑,当我们打开一个 office Power Point或者是WPS ,然后直接新建空白演示文稿就可以直接些内容,想要什么背景,字体,主题风格等,都可以直接在空白文稿中添加,实际上这个过程中,我们就在使用框架。还记得我们前面说的吧,框架是实现某种功能或者是项目的半成品,这里就和我们导入的ppt模板是一个道理,当我们导入一个ppt模板之后,只需要在里面添加我们要写入的内容就可以了,不用再担心字体库、风格库、动画库等。这些基础内容都是框架搭建好的基础支撑。
那我们做了这么多的赘述,其实就是想知道,我们为啥要在计算机行业使用框架,这个在前面其实已经提到了。互联网软件系统随着业务的发展,变得越来越复杂,不同领域的业务所涉及到的知识、内容、问题非常非常多,那么一定程度上使用框架就可以避免程序员重复造轮子,使我们把重心放在要实现的功能上面。
2.python flask框架
flask是python中基于WSGI的轻量级 web开发框架,也被我们称之为web微框架。微框架中的"微" 表示flask的目标是保持核心简单而又可扩展。flask不会替你做出很多决定,比如选用何种数据,使用何种模板引擎,这些在flask中都非常容易改变。"Flask可以变成你想要的任何东西,一切恰到好处,由你做主 "
这与python中最出名的Django框架形成了鲜明的对比。Django框架功能全面,它提供一站式解决方案,集成了MVT(Model-View-Template)和ORM(Object Relational Mapping),以及后台管理。但是缺点也很明显,它偏重。就像是一个已经装修好的房子,它提供好了你想要的东西,直接拿去用就好了。

Flask相对于Diango而言是轻量级的web框架。和Django不同,Flask轻巧、简洁,通过定制第三方扩展来实现具体的功能。就像是已经刷好墙的房子,你想要什么家具就自己添加。
//flask 包下载之后,会自动下载依赖库
Flask依赖于两个外部库——Werkceug和Jnija 2。Werkrcup是一个WSGI(在Web应用和多种服务器之间的标准Python接口)工具集,Jnija 2负责渲染模板。所以,在安装Flask时,会自动安装这两个库。
为了更好地管理Python应用,通常情况下会在虚拟环境中安装Flask框架。安装命令如下:
pip install flask
MarkupSafe 库:附带Jinjia,用于转义渲染模板不受信任的输入
itsDangerous:保护flask会话的cookie
Click库:用于编写命令行框架

用Flask实现随机抽奖应用
1.基础代码
//新建项目后的第一个简单的flask应用就诞生了
#导入库
from flask import Flask
app = Flask(__name__) #创建一个Flask实例
@app.route('/')
def index(): # 视图函数
return 'Hello World!'
if __name__ == '__main__':
app.run()
//那,这段代码是什么意思呢?
¤ 导入Flask库,定义Flask实例化对象app
¤ 实例化一个对象 app 时,传入 __name__ :目的是接受包或者模块的名称作为参数,让flask.helpers.get_root_path以便获得静态文件和模板文件的目录 “__name__ 可以简单认为代表目前这个文件。有了这个参数Flask会读取参数所提供的文件的内容,来获取app模板或是静态文件。”
¤ 使用route() 装饰器告诉Flask什么样的URL能触发执行被装饰的函数。
这个装饰函数就是视图函数,它返回显示在用户浏览器中的信息。
¤ 使用run()函数来让应用运行在本地服务器上。其中“ if _ name _ main _” 可确保服务器只在该脚本被Python解释器直接执行时才会运行。
// if __name__ == '__main__' 解释
¤ 由于pyton文件既可以做为一个脚本执行,也可以作为一个包被引用。 所以当我们只想让他作为一个脚本被执行时,就可以使用 if __name__ == '__main__' 来限定。原因是因为 当 print(__name__)直接被当作脚本执行时,会返回__main__ ,但如果被当作包引入时,print则不会输出任何结果。那么这个==判断就会失效,该程序下面的run函数就不会被执行。
2.在pycharm中运行结果

3.开启调试模式
虽然run() 方法使用于启动本机的开发服务器,但是每次修改代码后都要手动的重启它,比较烦琐,此时可是使用Flask 调试模式解决。
app.run(debug=True)
此外可以啊绑定ip和端口
app.run(host='0.0.0.0', port=80, debug=True)
0.0.0.0代表电脑所有的IP。80是HTTP网站服务的默认端口。什么是默认?比如,我们访问网站http://www.example.com,其实是访问的http://www.example.com:80,只不过:80可以省略不写。
由于绑定了80端口,需要使用root权限运行server.py。也就是:
$ sudo python3 server.py
4.路由
客户端(如Web浏览器)把请求发送给Web服务器后,Web服务器会把请求发送给Flask程序实例。程序实例需要知道对每个URL请求运行哪些代码,所以保存了一个URL到Pybon函数的映射关系。处理URL和函数之间关系的程序称为路由。
在Flask程序中,定义路由的最简便方式是使用程序实例提供的app. route装饰器,把装饰的函数注册为路由。路由映射关系如图所示。

5.模板
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用了一个名为
Jinja2的强大模板引擎。
render_template('tempalta_name.html',temolate_val = name)
第一个参数是渲染的模板名称 , 其余为模板中的变量的值
例如下面代码中的 return render_template('index.html',hero1=hero,h = hero[num])
如果在视图函数中调用代码,则会渲染tempales目录下的index.html模板文件,并将模板文件中的{{hero1}} 使用hero替代
6.项目代码
// flask/app.py
// index.html是在tempales文件夹中,且tempales文件夹必须要与 运行的文件(调用它的文件app.py)同级。
from flask import Flask, render_template
from random import randint
app = Flask(__name__)
hero = ['安琪拉', '白起', '老夫子', '不知火舞', '妲己', '狄仁杰', '典韦', '韩信', '刘邦', '刘禅', '鲁班七号', '墨子',
'孙膑', '孙尚香', '孙悟空',
'项羽', '亚瑟', '周瑜', '庄周', '蔡文姬', '武则天', '廉颇', '程咬金', '后羿', '扁鹊', '钟无艳', '花木兰',
'小乔', '王昭君', '虞姬', '甄姬',
'李元芳', '张飞', '刘备', '牛魔', '张良', '兰陵王', '露娜', '东皇太一', '貂蝉', '达摩', '曹操', '芈月', '阿轲',
'高渐离', '钟馗', '关羽',
'李白', '宫本武藏', '吕布', '嬴政', '娜可露露', '赵云', '姜子牙', '橘右京', '干将莫邪', '鬼谷子', '诸葛亮',
'安其拉', '白起', '不知火舞',
'妲己', '狄仁杰', '典韦', '韩信', '老夫子', '刘邦', '干将莫邪', '刘禅', '鲁班七号', '墨子', '孙膑', '孙尚香',
'孙悟空', '项羽', '亚瑟',
'周瑜', '庄周', '蔡文姬', '甄姬', '廉颇', '程咬金', '后羿', '扁鹊', '大乔', '钟无艳', '小乔', '王昭君', '虞姬',
'李元芳', '张飞', '刘备',
'牛魔张良', '兰陵王', '露娜', '貂蝉', '达摩', '曹操', '芈月', '荆轲', '高渐离', '钟馗', '花木兰', '关羽',
'李白', '宫本武藏', '吕布',
'嬴政', '娜可露露', '武则天', '赵云', '姜子牙','戈亚','海月']
@app.route("/index")
def index():
return render_template('index.html', hero=hero)
@app.route("/choujiang")
def choujiang():
num = randint(0,len(hero)-1)
return render_template('index.html',hero=hero,h = hero[num])
app.run(debug=True)
// flask/templates/index.html ,这里可以自己利用去美化前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ hero1 }}<br/><br/><br/>
<a href="/choujiang">随机抽取</a></br></h1>
<h1>你抽到的英雄是 : {{ h }}</h1>
</body>
</html>
7.实现效果

8.正则技巧
我这里使用的是sublime中的正则转换

写正则

转换后效果

参考文章: //建议读一下
什么是框架(https://zhuanlan.zhihu.com/p/114189046)
python flask框架(https://blog.csdn.net/qq_39838607/article/details/119563692)
使用 python flask 框架实现一个简单的抽奖系统的更多相关文章
- Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统
一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...
- Python Flask框架路由简单实现
Python Flask框架路由的简单实现 也许你听说过Flask框架.也许你也使用过,也使用的非常好.但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好 ...
- Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统
啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的corout ...
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)
#3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...
- python flask框架学习(一)——准备工作和环境配置与安装
Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)
#3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...
- python制作一个简单的中奖系统
注释: 展示图下的代码,我是用pycharm写的,是python解释器中的一种,本课没不同解释器的要求,可根据自己喜欢的解释器编写. 步骤: 本期给大家带来的是,一个简单的中奖系统,首先打开自己电脑上 ...
- Python使用Redis实现一个简单作业调度系统
Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...
随机推荐
- Android系统启动:1-综述
Android系统启动:综述 原文:http://gityuan.com/2016/02/01/android-booting/ 基于Android 6.0的源码剖析, Android启动过程概述 概 ...
- 执行insmod提示 invalid module format
内核版本和驱动版本不匹配: 1.假如内核版本是2018.3,驱动使用了另外一个版本,可能会出现这样的问题 2.内核和驱动版本一致,但内核进行了一些配置,导致驱动装不上,此时应该: make clean ...
- Libgdx游戏开发(6)——游戏暂停
原文: Libgdx游戏开发(6)--游戏暂停-Stars-One的杂货小窝 暂停也是一个游戏的必要功能了,本文研究了Libgdx实现游戏暂停 例子以桌面端游戏实现讲解为主,至于移动端,可能之后会进行 ...
- 【ClickHouse】2:clickhouse基本语法
背景介绍: 有三台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 centf8118.sharding1.db 192.168.81.18 clickhou ...
- 实用!一键生成数据库文档的神器,支持MySQL/SqlServer/Oracle多种数据库
Screw(螺丝钉)是一款简洁好用的数据库表结构文档生成工具,它的特点是:简洁.轻量.设计良好.多数据库支持.多种格式文档.灵活扩展以及支持自定义模板,对于有经常要进行数据库设计.评审.文档整理等需求 ...
- AT_agc019_b 题解
洛谷链接&Atcoder 链接. 题目简述 给定一个字符串 \(A\),可以选择区间 \([i,j]\) 翻转一次,求能得到多少本质不同的字符串.(\(A\) 的长度不超过 \(2 \time ...
- vue项目坑记录:vue项目运行卡在百分之几几几
今天晚上打着游戏,同事突然叫我拉项目下来运行,我打完就去拉代码了,结果vue项目运行卡在66%不动了,我也是百度一下分享别人怎么解决的文章给他,继续我的游戏! 结果呢? 游戏结束后,我拉代码,还是这个 ...
- Django model 层之事务管理总结
Django model 层之事务管理总结 by:授客 QQ:1033553122 实践环境 Python版本:python-3.4.0.amd64 下载地址:https://www.python.o ...
- ABC354
A link 模拟整个过程即可. 点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; sig ...
- 免费使用TasteWP一键搭建线上临时WordPress网站
虽然用宝塔面板或者1Panel面板可以非常快速的搭建一个WordPress网站,但是有时候只想测试下我设计的页面或者开发的主题和插件,又得买服务器,绑定域名,安装程序,搭建起来也过于浪费时间了:再或者 ...