初web表单和数据库

今晚完成了web表单制成的登录界面和与flask的sql结合的例子

首先一点就是:

import os
from flask import Flask, render_template, session, redirect, url_for,flash
from flask_script import Manager, Shell
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_wtf import Form
from wtforms import StringField, SubmitField ,PasswordField,BooleanField
from wtforms.validators import Required
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand


basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] =\
    'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')

manager = Manager(app)
bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
看见没,这是写这个程序之前需要准备的配置和初始化,幸好源码里面都有这些,令现在的我暂时是送了一口气

然后先说表单,首先在Flask的框架里面定义好表单,后来发现也可以自己写一个文件来保存表单,用的时候导入即可。然后在模版里面进行渲染,这样基础的表单就出来了:

class loginForm(Form):
    name = StringField('Username', validators=[Required()])
    password=PasswordField('Password',validators=[Required()])
    remember_me=BooleanField('Keep login')
    submit = SubmitField('login')
表单的定义如上,然后在模版里面,{{wtf.quick_form(form)}},这就是wtf的制成表单功能。

其次,数据库的定义也很简单

class User(db.Model):
    __tablename__='users'
    username=db.Column(db.String(64),primary_key=True)
    password=db.Column(db.Integer)

    def __repr__(self):
        return '<User %r>' % self.username
当然这里我没有用到数据库关系。然后,对数据库的操作是在windows的dos下进行的

还有删改查等功能也是以后经常需要使用的

最后,今天对路由和视图函数这里进一步理解

@app.route('/',methods=['GET','POST'])
def index():
    form=loginForm()
    if form.validate_on_submit():
        name=User.query.filter_by(username=form.name.data).first()
        word=User.query.filter_by(password=form.password.data).first()
        if name is None and word is None:
            newuser=User(username=form.name.data,password=form.password.data)
            db.session.add(newuser)
            session['know']=False
        else:
            session['know']=True
        session['name']=form.name.data
        form.name.data=''
        return redirect(url_for('index'))
    return render_template('index.html',form=form,name=session.get('name'),know=session.get('know',False))
form.XXX.data是获取输入的信息,挺主要的需求

而redirect辅助函数,是用来生成HTTP重定向响应。

执行的网页结果就是,登录名和密码如果是在数据库里面的话,上面信息会显示欢迎XX;如果不在数据库里,则显示no,然后把新用户加入数据库

在dos下输入query可以看到新增了数据

以下是源代码

# -*- coding: utf-8 -*-
import os
from flask import Flask, render_template, session, redirect, url_for,flash
from flask_script import Manager, Shell
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_wtf import Form
from wtforms import StringField, SubmitField ,PasswordField,BooleanField
from wtforms.validators import Required
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] =\
    'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')

manager = Manager(app)
bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

class loginForm(Form):
    name = StringField('Username', validators=[Required()])
    password=PasswordField('Password',validators=[Required()])
    remember_me=BooleanField('Keep login')
    submit = SubmitField('login')

class User(db.Model):
    __tablename__='users'
    username=db.Column(db.String(64),primary_key=True)
    password=db.Column(db.Integer)

    def __repr__(self):
        return '<User %r>' % self.username

@app.route('/',methods=['GET','POST'])
def index():
    form=loginForm()
    if form.validate_on_submit():
        name=User.query.filter_by(username=form.name.data).first()
        word=User.query.filter_by(password=form.password.data).first()
        if name is None and word is None:
            newuser=User(username=form.name.data,password=form.password.data)
            db.session.add(newuser)
            session['know']=False
        else:
            session['know']=True
        session['name']=form.name.data
        form.name.data=''
        return redirect(url_for('index'))
    return render_template('index.html',form=form,name=session.get('name'),know=session.get('know',False))

if __name__=='__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% extends "bootstrap/base.html"%}
    {% block title %}登录{% endblock %}
    {%block content %}
    <div class="content">
        {% for message in get_flashed_messages() %}
        <div class="alert alert-warning">
            <button type="button" class="close" data-dismiss="alter"></button>
            {{message}}
        </div>
        {% endfor %}
        {% block page_content %}{% endblock %}
    </div>
    {% endblock %}
</head>
{% block head %}
{{super()}}
<link rel="shortcut icon" href="{{url_for('static',filename='kobe.jpg')}}" type="image/x-icon">
<link rel="icon" href="{{url_for('static',filename='kobe.jpg')}}" type="image/x-icon">
{%endblock%}
<body>

</body>
</html>
{% extends "login-base.html"%}
{% import "bootstrap/wtf.html" as wtf %}
{% block title%}登录{% endblock %}
{% block page_content %}
<div class="page-header">
    {% if not know %}
    <p>This is no user</p>
    {% else %}
    <p>Welcome to here,{{name}}</p>
    {% endif %}
</div>
{{wtf.quick_form(form)}}
{%endblock%}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值