使用 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 Cam-x Actuator Bring up
高通Android Camera Bring Up Actuator reference:https://blog.csdn.net/mr_zjc/article/details/105736925 ...
- “科来杯”第九届山东省大学生网络安全技能大赛决赛部分wp
1.损坏的流量包 wireshark打不开,丢进winhex里,找关键字flag 哎,没找到. 那就仔细看看,在最后发现一串类似base64的密文 base64解密 得到flag 2.签到题 一个 ...
- 前端:如何让background背景图片进行CSS自适应
在设置login背景时,找到了一张这样的图片: 但是设置成login背景时,如果没有做一些css适应设置,图片就变样了,变成了这样: 严重变形了,这就造成了一种理想与现实的差距. 若想解决这个自适应问 ...
- HTB- Archetype
端口扫描 nmap -sV -sT 10.129.1.1 smbclint smbclient -L 10.129.149.214 获取密码 smbclient //10.129.149.214/ba ...
- 安装和引入方式在Element UI (Vue 2)和Element Plus (Vue 3)中的不同
安装和引入方式 Element UI (Vue 2): // main.js import Vue from 'vue'; import ElementUI from 'element-ui'; im ...
- Nginx 工作原理简介
在了解Nginx工作原理之前,我们先来了解下几个基本的概念 以及常见的I/O模型. 基本概念 同步:就是指调用方发起一个调用,在没有得到调用结果之前,该调用不返回.换句话说,也就是调用方发起一个调用后 ...
- for循环以及常用的遍历(迭代)用法
for循环以及常用的遍历(迭代)用法 概念:(概念才是高楼的地基!) for循环是一个计次循环,一般运用在循环次数已知的情况下.通常适用于枚举或遍历序列,以及迭代序列中的元素. 注意*:迭代变量用 ...
- (2024最新)有效解决OpenAI Chatgpt Plus升级报错【您的银行卡被拒绝了/your card has been declined」,不用再问怎么办?
在OpenAI升级ChatGPT plus时我们可能会遇到升级报错[您的银行卡被拒绝了/your card has been declined」,有些人看到这个可能就会不知所措 注意,这个问题目前依旧 ...
- Apache COC闪电演讲总结【OSGraph】
大家能看到我最近一直在折腾与OSGraph这个产品相关的事情,之前在文章<妙用OSGraph:发掘GitHub知识图谱上的开源故事>中向大家阐述过这个产品的设计理念和应用价值.比方说以下问 ...
- 【MySQL】查询是否连续5次失败
场所房间表 场所编号和房间号联合唯一, 一对多关系 场所编号关联商家ID,一对一关系 CREATE TABLE `aisw_room` ( `ID` int(11) NOT NULL AUTO_INC ...