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 框架实现一个简单的抽奖系统的更多相关文章

  1. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  2. Python Flask框架路由简单实现

    Python Flask框架路由的简单实现 也许你听说过Flask框架.也许你也使用过,也使用的非常好.但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好 ...

  3. Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统

    啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的corout ...

  4. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  5. Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架

    今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...

  6. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  7. python flask框架学习(一)——准备工作和环境配置与安装

    Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...

  8. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...

  9. python制作一个简单的中奖系统

    注释: 展示图下的代码,我是用pycharm写的,是python解释器中的一种,本课没不同解释器的要求,可根据自己喜欢的解释器编写. 步骤: 本期给大家带来的是,一个简单的中奖系统,首先打开自己电脑上 ...

  10. Python使用Redis实现一个简单作业调度系统

    Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...

随机推荐

  1. 高通Android Cam-x Actuator Bring up

    高通Android Camera Bring Up Actuator reference:https://blog.csdn.net/mr_zjc/article/details/105736925 ...

  2. “科来杯”第九届山东省大学生网络安全技能大赛决赛部分wp

      1.损坏的流量包 wireshark打不开,丢进winhex里,找关键字flag 哎,没找到. 那就仔细看看,在最后发现一串类似base64的密文 base64解密 得到flag 2.签到题 一个 ...

  3. 前端:如何让background背景图片进行CSS自适应

    在设置login背景时,找到了一张这样的图片: 但是设置成login背景时,如果没有做一些css适应设置,图片就变样了,变成了这样: 严重变形了,这就造成了一种理想与现实的差距. 若想解决这个自适应问 ...

  4. HTB- Archetype

    端口扫描 nmap -sV -sT 10.129.1.1 smbclint smbclient -L 10.129.149.214 获取密码 smbclient //10.129.149.214/ba ...

  5. 安装和引入方式在Element UI (Vue 2)和Element Plus (Vue 3)中的不同

    安装和引入方式 Element UI (Vue 2): // main.js import Vue from 'vue'; import ElementUI from 'element-ui'; im ...

  6. Nginx 工作原理简介

    在了解Nginx工作原理之前,我们先来了解下几个基本的概念 以及常见的I/O模型. 基本概念 同步:就是指调用方发起一个调用,在没有得到调用结果之前,该调用不返回.换句话说,也就是调用方发起一个调用后 ...

  7. for循环以及常用的遍历(迭代)用法

    for循环以及常用的遍历(迭代)用法   概念:(概念才是高楼的地基!) for循环是一个计次循环,一般运用在循环次数已知的情况下.通常适用于枚举或遍历序列,以及迭代序列中的元素. 注意*:迭代变量用 ...

  8. (2024最新)有效解决OpenAI Chatgpt Plus升级报错【您的银行卡被拒绝了/your card has been declined」,不用再问怎么办?

    在OpenAI升级ChatGPT plus时我们可能会遇到升级报错[您的银行卡被拒绝了/your card has been declined」,有些人看到这个可能就会不知所措 注意,这个问题目前依旧 ...

  9. Apache COC闪电演讲总结【OSGraph】

    大家能看到我最近一直在折腾与OSGraph这个产品相关的事情,之前在文章<妙用OSGraph:发掘GitHub知识图谱上的开源故事>中向大家阐述过这个产品的设计理念和应用价值.比方说以下问 ...

  10. 【MySQL】查询是否连续5次失败

    场所房间表 场所编号和房间号联合唯一, 一对多关系 场所编号关联商家ID,一对一关系 CREATE TABLE `aisw_room` ( `ID` int(11) NOT NULL AUTO_INC ...