|版权声明:本文为博主原创文章,未经博主允许不得转载。
上一个Part已经给TSSS编好了一个简单的Web服务,网页的基础模版也写好了,那从这个Part开始就慢慢增加编写功能。
先写基础功能:注册和登录的实现
复杂的安全cookies实现可以看这里 使用安全cookies,因为快速建站这个其实只相当于一个小demo,所以复杂的用户系统会在以后实现,现在只需要实现拥有用户名,密码,昵称和用户权限声明的一个用户系统就可以了。
看一下users的数据库规范然后再写代码
#数据库规范 codedb:users _id ID username 用户名 password 密码 nickname 昵称 roleid 权限声明
先写出来注册页面signup.html↓
{% extends "main.html" %} {% block content %} <form role="form" action="/sign/up" method="POST"> <div class="form-group"> <label for="exampleInput"></label>用户名<input class="form-control" name="username" /> </div> <div class="form-group"> <label for="exampleInputPassword1">密码</label><input type="password" class="form-control" id="exampleInputPassword1" name="password" /> </div> <div class="form-group"> <label for="exampleInput">昵称</label><input class="form-control" name="nickname" /> </div> <div class="checkbox"> <label><input type="checkbox" />Check me out</label> </div> <button type="submit" class="btn btn-default">提交</button> </form> {% end %}
再写个登录页面signin.html↓
{% extends "main.html" %} {% block content %} <form role="form" action="/sign/in" method="POST"> <div class="form-group"> <label for="exampleInput"></label>用户名<input class="form-control" name="username" /> </div> <div class="form-group"> <label for="exampleInputPassword1">密码</label><input type="password" class="form-control" id="exampleInputPassword1" name="password" /> </div> <div class="checkbox"> <label><input type="checkbox" />Check me out</label> </div> <button type="submit" class="btn btn-default">登录</button> </form> {% end %}
然后写SignHandler↓
class SignHandler(web.RequestHandler): def get(self,choice): if choice == 'in': self.render('sign\signin.html') else if choice == 'up': self.render('sign\signup.html') def post(self,choice): coll = self.application.db.users if choice == 'in': username = self.get_argument('username') if coll.find_one({'username':username}): if self.get_argument('password')==coll.find_one({'username':username})['password']: self.set_cookie('username',username) self.set_cookie('nickname',coll.find_one({'username':username})['nickname']) self.redirect('/') else: self.write({'error':'password is wrong'}) else: self.write({'error':'no this user'}) else if choice == 'up': username = self.get_argument('username') password = self.get_argument('password') nickname = self.get_argument('nickname') if coll.find_one({'username':username}): self.write({'error':'the username has been used'}) else: coll.insert({'username':username,'password':password,'nickname':nickname,'roleid':0}) self.redirect('/')
这样注册和登录的功能就实现了
--Part.Three--
Python快速建站系列-Part.Three-注册和登录的更多相关文章
-
Python快速建站系列-Part.One-组装开发环境
|版权声明:本文为博主原创文章,未经博主允许不得转载. 源代码都在github上:SmallStudyStation 现在是个demo,但回来会租个服务器,等功能完善了放到服务器上挂着,域名jusot ...
-
Python快速建站系列-Part.Five.1-个人主页及发表文章
|版权声明:本文为博主原创文章,未经博主允许不得转载. 现在的TSSS已经有了注册和登录的功能,首页的内容也填充好了,那这一节就完成用户个人主页的内容和发表文章功能的实现. 先完成用户个人主页的use ...
-
Python快速建站系列-Part.Four-首页内容填充
|版权声明:本文为博主原创文章,未经博主允许不得转载. Part.Three中实现了注册和登录的功能,那这一节完成主页内容的填充,并且主页中要实现简单的可以查找代码的功能. 而且有于公共代码部分存储在 ...
-
Python快速建站系列-Part.Two-结构化和布局
|版权声明:本文为博主原创文章,未经博主允许不得转载. 首先明确我们要建一个什么样的站,作为教程(也算自己使用tornado的一个小总结),自然功能不能太多,但又满足一个普通网站需要的就行了. 目前想 ...
-
Python快速建站系列-Part.Six-文章内容浏览
|版权声明:本文为博主原创文章,未经博主允许不得转载. 其实到这里网站的基本功能已经完成一半了,第六节就完成文章内容的阅读功能. 完成blogview.html↓ {% extends "m ...
-
Python快速建站系列-Part.Five.3-个人主页及资料页面
|版权声明:本文为博主原创文章,未经博主允许不得转载. 第五部分最后一节,完成个人主页里资料页面的个人资料的展示和修改功能,不过毕竟功能比较少,个人资料其实只有昵称一项,手动滑稽. 一如既往先写出来u ...
-
Python快速建站系列-Part.Five.2-个人主页及文章列表
|版权声明:本文为博主原创文章,未经博主允许不得转载. 从usercen.html就可以发现我为个人主页设了三个分开的小版面:写文章.个人文章目录.个人资料 所以按顺序Part.Five的第二部分就完 ...
-
PHPCMS快速建站系列之网站迁移(本地到服务器,服务器迁移,更换域名等)
可能出现的问题: 1.后台登录验证码显示不正常(修改/caches/configs/system.php文件) //网站路径'web_path' => '/', 2.phpsso修改 如果不修改 ...
-
PHPCMS快速建站系列之搜索功能
默认模板的搜索功能代码 <div class="bd"> <form action="{APP_PATH}index.php" method= ...
随机推荐
-
常用meta标签举例说明
本文是作者从百度百科和其他从网页中搜索到的资料,经综合整理,把常用meta标签列举并示例说明,仅供参考. 1.<meta charset="UTF-8"> --- ch ...
-
新提交审核app保留检查更新入口将被拒绝(读取App Store 版本号的)
3月起要求关闭所有App内的检查更新功能,苹果App Store将向用户自动提示更新,新版本提交审核版本如果保留检查更新入口,审核时,将被拒绝. 以上拒绝的方案: 读取App Store的版本号. 替 ...
-
如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
Laravel 和 Laravel 的邮件发送使用方式完全一致.Laravel 的邮件发送中文文档在:http: 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置 修改邮 ...
-
微信企业号办公系统-JSSDK上传图片(多图上传)
在开发微信企业号办公系统中,涉及到了图片上传功能,一开始使用的flash插件上传方法,在苹果手机上可以调用相机直接拍摄照片,但在安卓手机上只能选择照片. 微信jssdk-api带有一套完整的调用选择本 ...
-
Leetcode OJ : Restore IP Addresses backtrack暴搜 C++ solution
class Solution { public: vector<string> ret; string src; int len; unordered_set<string> ...
-
YAHOO 34 条前端优化建议
雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通 ...
-
mysql查询正在执行的sql
mysql> SHOW VARIABLES LIKE "general_log%"; +------------------+------------------------ ...
-
Python_守护进程、锁、信号量、事件、队列
1.创建进程 守护进程(*****) _.daemon = True # _进程成为守护进程 守护进程也是一个子进程. 主进程的<代码>执行结束之后守护进程自动结束. import ti ...
-
wpf(dispather调度者)
一.首先为什么要有dispather? wpf程序是有一个主线程多个子线程组成的.主线程负责创建ui界面,数据接收,处理事件,子线程负责处理消耗资源较多耗时的操作.然而子线程不能直接访问主线程那么这个 ...
-
当BeanUtils遇到泛型
前言: BeanUtils(spring版/apache版)工具极大方便了java developer, 尤其在写业务代码中, 各种域模型DO, BO, VO等对象之间的复制. 但使用BeanUtil ...