草草几行代码实现在线签到【开源】【tiper博客】
2021/4/17 18:26:41
本文主要是介绍草草几行代码实现在线签到【开源】【tiper博客】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本次分享的项目信息如下
- 项目名称:web-sign
- 涉及语言:Python3 + Html5 + Css3
- 开源类型:18年生产环境项目开源
- 时间节点:18年初版开发完成,21年4月首次开源
- 仓库:Gitee.com
- 通过本项目您可以学习到:Python3的基本语法、tornado 框架的基础应用、web开发基础和架构
项目仓库地址在文章末尾,下面我们来了解一下这个简单的练手。
项目需求是实现游戏公会出征统计(18年盛行的红衣军团玩法和公会),在出征前登记所有要出征的人员信息。
我个人搭建web项目喜欢从前端页面开始,以便于确定后端的功能需求。
首先,这个页面不需要登录,仅仅需要简单的一个收集表,一个提交按钮即可。所以,我们构建一个基础的不美化的表单页面,如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>出征登记</title> <h1 style="color: cornflowerblue">xxxx登记</h1> </head> <body background="xinkon.jpg" style=" background-repeat:no-repeat ; background-size:100% 100%;background-attachment:fixed;" > <form action="" method="post"> <p> QQ昵称<input type="text" required="required" placeholder="请输入正确的QQ昵称" name="user"></p> <p> QQ号<input type="text" required="required" class="form-control" id="recoSoft" maxlength="11" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入正确的QQ号" style="width: 200px;" name="userid"/> <p> 部门(参考下方选项)<input type="text" required="required" placeholder="请输入正确的部门" name="depar"></p> 红衣军总部, 红衣军一团, 红衣军二团, 红衣军三团, <p> yy号<input type="text" required="required" placeholder="该项将作为核对的主要依据" name="yyid"></p> <p>游戏昵称<input typr="text" required="required" placeholder="请输入正确的昵称" name="yxnc"> <p>游戏ID<input typr="text" required="required" placeholder="请输入正确的id" name="yxid"> <p style="color: cornflowerblue"><input type="submit" value="提交登记"></p> </form> </body> </html>
这样我们会得到一个极简的表单页面,前端的工作就结束了,接下来我们在目录下创建Python脚本程序(.py文件)。这个项目原本是采用的flask框架。后来为了便于管理和提升性能(最后这个项目没多久就不使用了),采用了更加完善的tornado框架。
为了使用tornado框架,我们需要引入tornado库,如果您的电脑未安装该库,可以在CMD或终端通过以下命令安装tornado库:
pip install tornado
安装好后我们使用import将他引入到我们的项目中,并根据自己的需求构建基础的启动代码,下面代码的含义通过注释表达:
from tornado import web,ioloop,httpserver #tornado 框架需要 import gc #清理缓存 import time #获取时间 import socket #socket SIGN_FILE_HANDLER = open('sign.csv', 'a') SIGN_FILE_HANDLER.write('姓名') SIGN_FILE_HANDLER.write('部门') SIGN_FILE_HANDLER.write('编号\n') SIGN_FILE_HANDLER.close() port = input("inport post: ") #自定义端口,手动输入 int(port) print("port is {a} are you sure?".format(a = port)) #文件句柄 SIGN_FILE_HANDLER = open('sign.csv','a') #以追加的方法打开sign.csv #表头 #ybd = time.localtime("%U") SIGN_FILE_HANDLER.write('签到记录\n,%s,%s,%s,%s\n' %("姓名",'部门','工号','时间')) errornum = 0 #异常判断参数,0为正常,大于3的时候表示错误 #逻辑处理模块 class SignpageHandler(web.RequestHandler): def get(self): try: self.render('sign.html') gc.collect() except: print("Error!\n 返回签到页面时出现异常") def post(self, *args, **kwargs): #接受来自前端的信息 try: user = self.get_argument('user') depar = self.get_argument('depar') num = self.get_argument('num') #写入到sign.csv文件 nowtime = time.localtime() print(user,depar,num,"time:%s" %(nowtime)) #在后端打印最新签到数据 signtime = time.strftime("%U:%u:%F %H:%M:%S") #获取当前时间(一年中第几周的星期几,年月日,24小时制时间) SIGN_FILE_HANDLER.write('%s,%s,%s,%s\n' %(user,depar,num,signtime)) #写入文件 SIGN_FILE_HANDLER.fileno() self.write('签到成功,时间:%s' %(signtime)) gc.collect() except: t = time.strftime("%F %H:%M:%S") print("Error!\n 在签到页面出现异常 time:%s" %t) else: t = time.strftime("%F:%H:%M:%S") print("客户端访问签到页面一次,没有发生意外 time:%s" %t) # 用户签到处理模块; class SignPageHandlers(web.RequestHandler): # 当用户请求为get时,跳转页面到签到页面; def get(self, *args, **kwargs): self.render("sign.html") # 当用户请求为post时,对用户提交信息做验证,并存储签到信息到文件中; def post(self, *args, **kwargs): name = self.get_argument('name') department = self.get_argument('department') num = self.get_argument('num') if name and department and num: print(name, department, num) # 将用户签到信息写入文件中; SIGN_FILE_HANDLER.write('%s,%s,%s\n' %(name, department, num)) # 手动刷新, 将缓冲区内容写入的文件; SIGN_FILE_HANDLER.flush() self.write('签到成功!') else: self.write('请填写正确的签到信息!') #网站路由 try: application = web.Application([ (r"/signs",SignPageHandlers), (r"/sign", SignpageHandler), # 签到页面 (r"/webcs",WEB_TWOHTML_FILE), #web测试页面 ]) except: print("Error!\n 路由出现错误") #服务(前台) if __name__ == '__main__': ##18年老项目了,没写静态文件分离和日志记录等功能 host_name = socket.gethostname() # 获取主机名 ip_address = socket.gethostbyname(host_name) # 获取主机名对应的IP地址 url = ('http://' + ip_address + ':' + port) #拼接出url urlindex = ('http://' + ip_address + ':' + port + '/index') #拼接出首页url print("url: %s \n主页::%s" % (url,urlindex)) http_server = httpserver.HTTPServer(application) http_server.listen(port) #监听端口 ioloop.IOLoop.current().start()
这样就完成了大部分的工作了,剩下的根据自己需求调整即可。
最后附上我的项目仓库:
仓库地址:https://gitee.com/wubie/custom-online-sign-in
这篇关于草草几行代码实现在线签到【开源】【tiper博客】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)