环境:python2.7

python库:flask,flask_wtf,wtforms,sqlalchemy

原理:运行app-连接数据库-打开登录页面-输入登录信息(错误->提示错误信息;正确跳转新的search页面)

贴上代码:

web.py

# -*- coding: utf-8 -*-
#
# web查询接口测试
# 需要登录->输入关键字->查询
from sqlalchemy import *
from sqlalchemy.orm import scoped_session, sessionmaker
###-----------连接数据库 type=mysql user:password localhost
db_connect_string = 'mysql://root:root@127.0.0.1:3306/flask?charset=utf8'
ssl_args = {'ssl':{'cert':'/home//ssl/client-cert.pem',
'key':'/home/shouse/ssl/client-key.pem',
'ca':'/home/shouse/ssl/ca-cert.pem'}
}
###创建引擎
engine = create_engine(db_connect_string, connect_args =ssl_args)
SessionType = scoped_session(sessionmaker(bind=engine, expire_on_commit=False)) ###构建连接数据库函数
def get_session():
return SessionType
####创建自动事务函数
from contextlib import contextmanager
@contextmanager
def session_scope():
db = get_session()
try:
yield db
db.commit()
except:
db.rollback()
raise
finally:
db.close() ####-------创建数据库字段
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine Base = declarative_base()
# 创建单表
#
###账户表account
class Account(Base):
__tablename__ = 'account'
id = Column(Integer, primary_key=True)
name = Column(String(32))
pwd = Column(String(16))
###用户表account
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(32))
__table_args__ = (
UniqueConstraint('id', 'name', name='uix_id_name'),
)
###地址account
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
address = Column(String(32))
phone = Column(String(32))
user_id = Column(Integer, ForeignKey('users.id')) ###创建表
Base.metadata.create_all(engine) ##-----------------------------------分割线-------------------------------------## ######开始web脚本部分
import flask
from flask_wtf import FlaskForm
from wtforms import *
from wtforms.fields import (StringField, PasswordField,)
from wtforms.validators import DataRequired, Length
from flask import Flask, render_template, redirect,session
app = Flask(__name__)
import os
from os import path
d = path.dirname(__file__) ####定义SECRET_KEY保证安全性
app.config['SECRET_KEY'] = 'my web_test!!'
###定义登录表单字段
#user, password,submit
#再渲染到html页面 class LoginForm(FlaskForm):
# Text Field类型,文本输入框,必填,用户名长度为4到25之间
username = StringField('Username', validators=[DataRequired(u'.请输入用户名!!'),Length(min=4, max=25,message=u'请输入4-25个字符!')])
# Text Field类型,密码输入框,必填,必须同confirm字段一致
password = PasswordField('Password', validators=[
DataRequired(u'.请输入密码!!'),
Length(min=4, max=25,message=u'请输入4-25个字符!'),
])
submit = SubmitField('login') #####定义搜索页面字段
#key, submit
class SearchForm(FlaskForm):
key = StringField('Key',validators=[
DataRequired(),
Length(min=4, max=255)
])
submit = SubmitField('search') ###定义登录控制器 允许访问的方式 get/post
@app.route('/test/login', methods=['GET','POST'])
def LoginFormViews():
###示例登陆类
form = LoginForm()
if flask.request.method == "GET":
####get请求就显示表单页面,渲染字段->login.html
return render_template('login.html',form=form)
else:
#print form.image.data 验证通过
if form.validate_on_submit():
###开始check 用户名和密码
username = form.username.data
password = form.password.data
with session_scope() as db:
list = db.query(Account).filter(Account.name==username, Account.pwd==password).first()
if list:
print list
####把用户名记入session/cookies
session['username'] = username
return redirect('/test/search')
else:
return redirect('/test/login')
else:
#print form.errors
###把错误信息返回到页面
return render_template('login.html',form=form,error=form.errors) #######search控制器
@app.route('/test/search', methods=['GET','POST'])
def SearchFormViews():
form = SearchForm()
if flask.request.method == "GET":
####判断是否登录
if session.has_key('username'):
#return 'Logged in as %s' % session['username']
return render_template('search.html',form=form)
else:
return redirect('/test/login')
else:
#print form.image.data
if form.validate_on_submit():
key = form.key.data
####开始查询 字段
return redirect('/test/search')
else:
#print form.errors
###把错误信息返回到页面
return render_template('search.html',form=form,error=form.errors) ######注销控制器
@app.route('/test/logout', methods=['GET'])
def logout():
if flask.request.method == "GET":
####开始注销当前用户
session.pop('username',None)
return redirect('/test/login') if __name__ == '__main__':
app.run(host='127.0.0.1',port='', debug=False)

同一目录下新建templates文件夹存放静态文件

_formhelpers.html  配置文件,用来循环表单字段

{% macro render_field(field) %}
<div style="height:24px;">
<span>{{ field.label }}:</span>
{{ field(**kwargs)|safe }}
{% if field.errors %}
<b class=errors style="color:red">
{% for error in field.errors %}
<span>{{ error }}</span>'
{% endfor %}
</b>
{% endif %}
</div>
{% endmacro %}

login.html  登录文件

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Form</title>
</head>
<body>
<div style="margin: 0 auto;width:200px; height: 40px; line-height: 40px;">登录系统</div> {% from "_formhelpers.html" import render_field %}
<form action='/test/login' method='post' name='LoginFormViews' enctype="multipart/form-data">
{{ form.hidden_tag() }}
{#{ form.csrf_token }#}
<table>
{{ render_field(form.username) }}
{{ render_field(form.password) }}
</table>
{{ form.submit }}
</form> <hr></hr> </body>
</html>

search.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Form</title>
</head>
<body>
<div style="margin: 0 auto;width:200px; height: 40px; line-height: 40px;">搜索({{session['username']}})<b style="color:red;"><a href="/test/logout">注销</a></b></div> {% from "_formhelpers.html" import render_field %}
<form action='/test/news_form' method='post' name='NewsFormViews' enctype="multipart/form-data">
{{ form.hidden_tag() }}
{#{ form.csrf_token }#}
<table>
{{ render_field(form.key) }}
</table>
{{ form.submit }}
</form> <hr></hr> </body>
</html>

下次讲讲表单字段的使用,本次只是用了2种类型的字段,以及错误的提示信息。

flask连接sqlalchemy数据库,实现简单的登录跳转功能的更多相关文章

  1. 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 ...

  2. 用asp连接Access数据库 制作简单登陆界面

    [题外话:最近做Internet作业,在这写一个适合初学入门的ASP连接ACCESS数据库做登陆界面的简单的例子,以慰藉我一口气把以前做过的系统中的PHP代码全改成ASP代码来临时应付作业的心情... ...

  3. JavaWeb连接SQLServer数据库并完成一个登录界面及其功能设计。

    一.JDBC连接SQLserver数据库的步骤: 1.下载SQLserver的JDBC驱动文件——Microsoft JDBC Driver 4.0 for SQL Server 2.例如下载得到的文 ...

  4. flask连接mysql数据库

    from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...

  5. Java连接MySQL数据库及简单的增删查改操作

    主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...

  6. Java连接MySQL数据库及简单操作代码

    1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...

  7. 如何登录mysql? cmd怎么连接mysql数据库||从MYSQL客户端登录MYSQL

    1 2 3 4 5 6 7 分步阅读 Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢?本经验咗嚛介绍几种常见的方法 工具/原料   mysql 连 ...

  8. python web开发-flask连接sqlite数据库

    在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1.       数据准备 先在sqlite3中创建一 ...

  9. Go 连接 mysql 数据库的简单测试.

    1. import 的时候 总是很慢 容易失败 所以 优先导入几个必须要的包 go get github.com/go-sql-driver/mysql 安装完之后 会在gopath 目录下发现相关的 ...

随机推荐

  1. caioj 1237: 【最近公共祖先】树上任意两点的距离 在线倍增ST

    caioj 1237: [最近公共祖先]树上任意两点的距离 倍增ST 题目链接:http://caioj.cn/problem.php?id=1237 思路: 针对询问次数多的时候,采取倍增求取LCA ...

  2. JAVA调用WCF

    Java环境下生成代理类的工具有很多,如wsdl2Java,wsimport 等.本文中使用的工具是wsimport. 1.wsdl2Java 生成命令实例: wsdl2Java -p package ...

  3. 开源:Sagit.Framework For IOS 开发框架

    一:创造Sagit开发框架的起因: 记得IT连创业刚进行时,招了个IOS的女生做开发,然后: ----------女生的事故就此开始了----------- 1:面试时候:有作品,态度也不错,感觉应该 ...

  4. css走过的坑

    css盒模型 1.内联元素 设置宽高无效.margin左右有效上下无效.padding都有效 会被当做字体所以内联之间有间隙 父级元素要设置font-size:0; 内联元素:a.b.button.e ...

  5. kubernetes入门实践

    k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...

  6. SVG绘图学习总结

    在我们平时做的很多网站项目中都会需要绘制各种各样的二维矢量图形.比如做城市地下管网的断面图.管线管点的坐标位置矢量标识图.钻孔位置或地层剖面图等等.我们有很多中方法来绘制这些矢量图(vml.canva ...

  7. Java-----关于线程池的使用

    关于线程的相关概念不在此阐述,请百度或谷歌之 对于学习线程来说,我认为从代码开始学习比较好,前提是有一定的技术的积累,否则请关闭不用再看了~ 线程池四种实现方式. ①可缓存线程池,如果线程池长度超过处 ...

  8. openstack-glance API 镜像管理的部分实现和样例

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免.欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  9. 开源 免费 java CMS - FreeCMS1.9 移动APP管理 执行配置

    项目地址:http://www.freeteam.cn/ 移动APP管理 从FreeCMS 1.8開始支持 执行配置 管理会员能够在这里设置移动app的欢迎图片. 从左側管理菜单点击执行配置进入. 选 ...

  10. Android之——ListView优化

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47209253 作为client.其最基本的任务就是最直观的和用户交互.从serve ...