Flask+MySql实现用户登录注册
来源:互联网 发布:没有违法淘宝规则 编辑:程序博客网 时间:2024/06/05 06:03
Flask+MySql实现用户登录注册
项目使用插件:
flask_bootstrap
flask_wtf
flask_login
flask_sqlalchemy
用户模型类:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/8/1 14:45# @File : Model.py"""数据模型"""from flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom Start import login_mangerfrom Start import dbclass Users(UserMixin,db.Model): __tablename__ = 'py_user'#对应mysql数据库表 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, index=True) pwd = db.Column(db.String(64), unique=True, index=True) def __init__(self,name,pwd): self.name=name self.pwd=pwd def get_id(self): return unicode(self.id) def __repr__(self): return '<User %r>' % self.name def is_authenticated(self): return True def is_active(self): return True def is_anonymous(self): return False
表单类:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/8/1 14:46# @File : Form.py"""表单类"""from wtforms import StringField,SubmitField,PasswordFieldfrom wtforms.validators import Requiredfrom flask_wtf import FlaskForm#登录表单class Login_Form(FlaskForm): name=StringField('name',validators=[Required()]) pwd=PasswordField('pwd',validators=[Required()]) submit=SubmitField('Login in')#注册表单class Register_Form(FlaskForm): name=StringField('name',validators=[Required()]) pwd=PasswordField('pwd',validators=[Required()]) submit=SubmitField('register')
视图类:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/8/1 14:45# @File : Views.py"""视图模型"""from flask import render_template,Blueprint,redirect,url_for,flashfrom Start import login_mangerfrom Form import Login_Form,Register_Formfrom Model import Usersfrom flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom DB import dbblog=Blueprint('blog',__name__) #蓝图@blog.route('/')def index(): form=Login_Form() return render_template('login.html',form=form)@blog.route('/index')def l_index(): form = Login_Form() return render_template('login.html',form=form)@blog.route('/login',methods=['GET','POST'])def login(): form=Login_Form() if form.validate_on_submit(): user=Users.query.filter_by(name=form.name.data).first() if user is not None and user.pwd==form.pwd.data: login_user(user) flash('登录成功') return render_template('ok.html',name=form.name.data) else: flash('用户或密码错误') return render_template('login.html',form=form)#用户登出@blog.route('/logout')@login_requireddef logout(): logout_user() flash('你已退出登录') return redirect(url_for('blog.index'))@blog.route('/register',methods=['GET','POST'])def register(): form=Register_Form() if form.validate_on_submit(): user=Users(name=form.name.data,pwd=form.pwd.data) db.session.add(user) db.session.commit() flash('注册成功') return redirect(url_for('blog.index')) return render_template('register.html',form=form)
项目启动类:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/8/1 14:50# @File : Start.py"""应用启动类"""from flask import Flask,render_template,flash,url_for,redirect,Blueprintfrom flask_bootstrap import Bootstrapfrom flask_moment import Momentfrom flask_wtf import FlaskFormfrom flask_login import LoginManager,login_user,UserMixin,logout_user,login_requiredfrom flask_sqlalchemy import SQLAlchemyimport sys#解决flash的一个bugdefaultencoding = 'utf-8'if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)app = Flask(__name__)#各项插件的配置app.config['SECRET_KEY']='kkk'app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:1996112lin@localhost/mydata'#配置数据库app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Truedb = SQLAlchemy()db.init_app(app)bootstrap = Bootstrap(app)moment=Moment(app)login_manger=LoginManager()login_manger.session_protection='strong'login_manger.login_view='blog.login'login_manger.init_app(app)@login_manger.user_loaderdef load_user(user_id): from Model import Users return Users.query.get(int(user_id))"""蓝图注册"""def init(): from Views import blog app.register_blueprint(blueprint=blog,url_prefix='/blog')if __name__ == '__main__': init() app.run(port=6626,debug=True)
本例使用了Jinja2模板进行渲染
基础类模板:
{% extends "bootstrap/base.html" %}{% block title %}Flasky{% endblock %}{% block head %}{{ super() }}<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon"><link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">{% endblock %}{% block navbar %}<div class="navbar navbar-inverse" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Flasky</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">Home</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if current_user.is_authenticated %} <li><a href="{{ url_for('blog.logout') }}">Log Out</a></li> {% else %} <li><a href="blog.index">Log In</a></li> {% endif %} </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="{{ url_for('blog.register') }}">Register in</a></li> </ul> </div> </div></div>{% endblock %}{% block content %}<div class="container"> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} {% block page_content %}{% endblock %}</div>{% endblock %}{% block scripts %}{{ super() }}{{ moment.include_moment() }}{% endblock %}
登录模板:
{% extends "form_base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block title %}Flasky{% endblock %}{% block page_content %}<div class="page-header"> <h1>Login</h1></div> <form action="/blog/login" method="post"> {{ wtf.quick_form(form) }} </form>{% endblock %}
注册模板:
{% extends "form_base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block title %}Flasky{% endblock %}{% block page_content %}<div class="page-header"> <h1>Register</h1></div> <form action="/blog/register" method="post"> {{ wtf.quick_form(form) }} </form>{% endblock %}
登录后模板:
<!DOCTYPE html>{% extends 'form_base.html' %}<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body>{% block page_content %} <div class="page-header"> <h1>Hello,{{ name }}</h1></div>{% endblock %}</body></html>
启动后访问:
http://127.0.0.1:6626/blog/
效果:
阅读全文
1 0
- Flask+MySql实现用户登录注册
- flask 用户:注册、登录和退出
- 用 Flask 来写个轻博客 (21) — 结合 reCAPTCHA 验证码实现用户注册与登录
- Java+mysql用户注册登录
- PHP+MySQL实现用户登录注册API接口
- struts2框架+mysql,实现用户登录、注册功能
- Node.js+Express+MySql实现用户登录注册
- 基于ajax+php+mysql数据库实现用户注册登录
- 网站用户登录注册实现
- flask-web开发中登录和注册功能的实现
- 使用Forms Authentication实现用户注册、登录
- 使用Forms Authentication实现用户注册、登录
- PHP用户登录注册模块实现
- 使用Forms Authentication实现用户注册、登录
- 实现PHP用户的注册与登录
- 使用Forms Authentication实现用户注册、登录
- 实现PHP用户的注册与登录 .
- 使用Forms Authentication实现用户注册、登录
- Stm32学习笔记(1)-利用TIM1产生SPWM波
- TCP/IP总结
- lepus监控myqsl redis的报错解决
- 网路配置基础【Linux-shell】
- SQL安装以及ODBC配置
- Flask+MySql实现用户登录注册
- 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
- Struts2学习笔记(七)——Action处理请求参数
- lua随机数生成问题
- dos遍历文件夹,把文件写入同一文件中
- eclipse安装js提示插件
- Farm Tour POJ
- poj 1251 最小生成树 prim算法
- 百度笔试题:malloc/free与new/delete的区别