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>

flask登录注册简单的例子的更多相关文章

  1. go语言实现一个简单的登录注册web小程序

    最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...

  2. 7. Swift 基于Xmpp和openfire实现一个简单的登录注册

    1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...

  3. jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册

    简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...

  4. 简单登录注册实现(Java面向对象复习)

    简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面:     ...

  5. tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册

    tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间 ...

  6. Flask博客类登录注册验证模块代码(十四)

    1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...

  7. Angular之简单的登录注册

    使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻…… 里面涉及到的知识点记录: 1.本地存储的操作 ...

  8. Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  9. Python简单的登录注册代码

    #-*- coding: utf-8 -*- import hashlib # 定义数据库(声明字典) #注册登录的简单hash处理 db={} def get_md5(password): md5= ...

随机推荐

  1. Android逆向 APK文件组成

    一 了解APK文件 我们知道Android系统能运行的程序是.apk文件格式,其实它就是一个压缩包而已,把.apk修改成.zip,然后解压就可以得到该apk内部的文件结构. PS: 既然可以把apk文 ...

  2. LeetCode题解之 Implement strStr()

    1.题目描述 2.题目分析 字符串操作,注意边界条件即可. 3.代码 int strStr(string haystack, string needle) { int n = needle.size( ...

  3. SQL Server中怎么查看每个数据库的日志大小,以及怎么确定数据库的日志文件,怎么用语句收缩日志文件

    一,找到每个数据库的日志文件大小 SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace) DBA 日常管理工作中,很重要一项工作就是监视数据库文件大小,及日志文 ...

  4. 解决JBoss只能通过localhost访问不能通过IP的问题

    前序 现在EJB是真的有点落伍了么,网上找点资料都挺难的样子,而且都是很久的了..好吧,最近对EJB有点兴趣学习一下,结果下载到服务器启动后,居然不能直接通过服务器IP访问,也是醉了,默认只能通过本地 ...

  5. MySQL锁(行锁、表锁、页锁、乐观锁、悲观锁等)

    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...

  6. 重置AD用户密码

    $cc = import-csv D:\Powershell\Tauba.csv foreach ($c in $cc) { $c.username $pwd = $c.password get-ad ...

  7. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...

  8. MySQL基础之 统计函数总结

    五种统计函数:count().max().avg().min().max()函数 count()函数 count()函数在进行计算的时候,是分情况进行计算的,主要是一下两种 1.采用count(*)对 ...

  9. SDN 第四次上机作业

    1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...

  10. 【Alpha】团队课程展示

    团队展示报告 团队分工 陈涵 PM + 后端开发 ,统筹全队安排,完成了登录界面,以及一部分部门模块和课程中教室模块的编写. 张鹏 后端开发,主要完成了主界面和其他功能界面的编写,课程界面的编写,以及 ...