flask 开发用户登录注册功能
flask 开发用户登录注册功能
flask开发过程议案需要四个模块:html页面模板、form表单、db数据库操作、app视图函数
1.主程序
# app.py # Auther: hhh5460
# Time: 2018/10/05
# Address: DongGuan YueHua from functools import wraps
from flask import Flask, request, render_template, redirect, url_for, flash, session from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import and_, or_ app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.secret_key = '\xc9ixnRb\xe40\xd4\xa5\x7f\x03\xd0y6\x01\x1f\x96\xeao+\x8a\x9f\xe4' db = SQLAlchemy(app) ############################################
# 数据库
############################################ # 定义ORM
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(80))
email = db.Column(db.String(120), unique=True) def __repr__(self):
return '<User %r>' % self.username # 创建表格、插入数据
@app.before_first_request
def create_db():
db.drop_all() # 每次运行,先删除再创建
db.create_all() admin = User(username='admin', password='root', email='admin@example.com')
db.session.add(admin) guestes = [User(username='guest1', password='guest1', email='guest1@example.com'),
User(username='guest2', password='guest2', email='guest2@example.com'),
User(username='guest3', password='guest3', email='guest3@example.com'),
User(username='guest4', password='guest4', email='guest4@example.com')]
db.session.add_all(guestes)
db.session.commit() ############################################
# 辅助函数、装饰器
############################################ # 登录检验(用户名、密码验证)
def valid_login(username, password):
user = User.query.filter(and_(User.username == username, User.password == password)).first()
if user:
return True
else:
return False # 注册检验(用户名、邮箱验证)
def valid_regist(username, email):
user = User.query.filter(or_(User.username == username, User.email == email)).first()
if user:
return False
else:
return True # 登录
def login_required(func):
@wraps(func)
def wrapper(*args, **kwargs):
# if g.user:
if session.get('username'):
return func(*args, **kwargs)
else:
return redirect(url_for('login', next=request.url)) #
return wrapper ############################################
# 路由
############################################ # 1.主页
@app.route('/')
def home():
return render_template('home.html', username=session.get('username')) # 2.登录
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if valid_login(request.form['username'], request.form['password']):
flash("成功登录!")
session['username'] = request.form.get('username')
return redirect(url_for('home'))
else:
error = '错误的用户名或密码!' return render_template('login.html', error=error) # 3.注销
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('home')) # 4.注册
@app.route('/regist', methods=['GET','POST'])
def regist():
error = None
if request.method == 'POST':
if request.form['password1'] != request.form['password2']:
error = '两次密码不相同!'
elif valid_regist(request.form['username'], request.form['email']):
user = User(username=request.form['username'], password=request.form['password1'], email=request.form['email'])
db.session.add(user)
db.session.commit() flash("成功注册!")
return redirect(url_for('login'))
else:
error = '该用户名或邮箱已被注册!' return render_template('regist.html', error=error) # 5.个人中心
@app.route('/panel')
@login_required
def panel():
username = session.get('username')
user = User.query.filter(User.username == username).first()
return render_template("panel.html", user=user) if __name__ == '__main__':
app.run(debug = True)
2.主页
<!-- templates/home.html --> <DOCTYPE html>
<html lang="zh-han">
<head>
<title>主页</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
{% if username %}
<p>{{username}},欢迎来到主页! <a href="{{ url_for('panel') }}">个人中心</a> <a href="{{ url_for('logout') }}">注销</a></p>
{% else %}
<p>欢迎来到主页! <a href="{{ url_for('login') }}">登录</a> <a href="{{ url_for('regist') }}">注册</a></p>
{% endif %}
</body>
</html>
3.登录页面
<!-- templates/login.html --> <DOCTYPE html>
<html lang="zh-han">
<head>
<title>登录</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<form method="post" action='/login'>
<label>用户名:<input type="text" name="username" value=""></label><br>
<label>密码:<input type="password" name="password" value=""></label><br>
<input type="submit" value="登录">
</form> {% if error %}
<p>{{error}}</p>
{% endif %}
</body>
</html>
4.注册页面
<!-- templates/regist.html --> <DOCTYPE html>
<html lang="zh-han">
<head>
<title>注册</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<form method="post" action='/regist'>
<label>用户名:<input type="text" name="username" value=""></label></br>
<label>密码:<input type="password" name="password1" value=""></label></br>
<label>重复密码:<input type="password" name="password2" value=""></label></br>
<label>邮箱:<input type="email" name="email" value=""></label></br>
<input type="submit" value="注册">
</form> {% if error %}
<p>{{error}}</p>
{% endif %}
</body>
</html>
5.个人中心页面
<!-- templates/panel.html --> <DOCTYPE html>
<html lang="zh-han">
<head>
<title>个人中心</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<h3>个人中心</h3>
<p>姓名:{{user.username}}</p>
<p>密码:{{user.password}}</p>
<p>邮箱:{{user.email}}</p>
</body>
</html>
原文地址https://www.cnblogs.com/hhh5460/p/9745812.html
flask 开发用户登录注册功能的更多相关文章
- Java Spring+Mysql+Mybatis 实现用户登录注册功能
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- PHP实现用户登录注册功能
初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果: 注册成功条件/功能: 1)用户名不能冲突 2)两次密 ...
- Flask框架实现登录注册功能(mysql数据库)
前言: 本例使用Flask框架完成登录和注册操作,包括前端(index.html,regist.html)和后端(app.py)两部分,前端页面不过多介绍,直接进入后端部分: 逻辑思路: 登录部分:运 ...
- 利用PHP连接数据库——实现用户登录注册功能以及管理员对用户注册的审核功能
1.用户注册页面 页面效果: 代码如下: <!DOCTYPE html><html> <head> <meta charset=" ...
- iOS开发一个用户登录注册模块需要解决的坑
最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...
- javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- 基于Servlet+JSP+JavaBean开发模式的用户登录注册
http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...
随机推荐
- Java部分目录
一.Java基础 1.访问权限控制 2.重载和覆盖 3.面向对象的特征 4.接口和抽象类 5.Java环境变量配置 6.Java英文缩写详解 7.如何在Maven项目中引入自己的jar包 8.使用ba ...
- php审核流程详解
在公司运营中,人员的变动及请假.离职情况都很普遍,这就需要有一个管理系统来系统的做一套流程,可以提升工作效率节省时间.在流程中需要有顺序的进行提交审核,接下来我们做一套简单的新建流程以及提交审核的系统 ...
- 《linux就该这么学》课堂笔记02 虚拟机安装使用
这节学习了虚拟机安装RHEL系统,了解了shell.以及命令的格式
- linux设备驱动程序-设备树(0)-dtb格式
linux设备树dtb格式 设备树的一般操作方式是:开发人员根据开发需求编写dts文件,然后使用dtc将dts编译成dtb文件. dts文件是文本格式的文件,而dtb是二进制文件,在linux启动时被 ...
- Linux访问控制列表(Access Control List,简称ACL)
Linux访问控制列表(Access Control List,简称ACL) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ACL概述 ACL:Access Control L ...
- k8s包管理工具helm - 介绍和安装
目录 1.Kubernetes 应用部署的挑战 2.Helm 是什么 3.Helm 组件及相关术语 4.Helm 工作原理 5.Helm 安装 5.1 客户端安装 5.2 安装服务端 Tiller 5 ...
- [AI] 切换cuda版本的万金油
1. 环境 ubuntu16.04 GTX1080Ti x 4 nvidia-418 cuda-10.1 pytorch1.0.0 目标:在最新的显卡驱动下,使用不同版本的cuda和深度学习框架来执行 ...
- 用mingw32编译ffmpeg2.7
1. 下载x265最新源码: 下载ffmpeg源码(我用的是2.7): 下载cmake最新版本并安装: 下载SDL(我用的SDL-1.2.15): 下载min ...
- Python开发笔记:网络数据抓取
网络数据获取(爬取)分为两部分: 1.抓取(抓取网页) · urlib内建模块,特别是urlib.request · Requests第三方库(中小型网络爬虫的开发) · Scrapy框架(大型网络爬 ...
- PHP——数组根据某一键值合并
前言 其实要实现很简单直接foreach,再根据PHP中数组的特性就可以轻松实现. 步骤 这是源数据的格式 $info = [ [ "gname" => "特别关心 ...