Flask的简单应用

这篇博客介绍了如何在Flask应用中进行数据库交互,包括创建数据模型、添加信息到数据库以及前端页面的设计,如登录界面,允许用户进行编辑、添加和删除等操作。
摘要由CSDN通过智能技术生成
Todo:
from functools import wraps
from werkzeug.security import check_password_hash
from models import app, Todo, db, Department, User, UserLog
from flask import render_template, redirect, url_for, request, session, flash
def is_login(f):
    @wraps(f)
    def wrapper(*args,**kwargs):
        if not "user" in session:
            return redirect(url_for('login'))
        return f(*args,**kwargs)
    return wrapper
@app.route('/list/<int:page>')
@app.route('/list/')
# @is_login
def list(page=1):
    todos = Todo.query.paginate(page,per_page=4)
    parts = Department.query.all()
    return render_template('list.html', todos=todos, parts=parts)
@app.route('/done/<int:todo_id>')
def done(todo_id):
    todo = Todo.query.filter_by(id=todo_id).first()
    todo.status = True
    try:
        db.session.add(todo)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        return e
    return redirect(url_for('list',page=1))
@app.route('/undone/<int:todo_id>/')
@is_login
def undone(todo_id):
    todo = Todo.query.filter_by(id=todo_id).first()
    todo.status = False
    try:
        db.session.add(todo)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        return e
    return redirect(url_for('list',page=1))
@app.route('/delete/<int:todo_id>/<int:page>/')
@is_login
def delete(todo_id,page=1):
    u = Todo.query.filter_by(id=todo_id).first()
    db.session.delete(u)
    db.session.commit()
    return redirect(url_for('list',page=page))
@app.route('/add/',methods=['POST'])
def add():
    data = request.form
    name = data['todo_name']
    part = data['part']
    todo = Todo(name=name,department_id=part)
    db.session.add(todo)
    db.session.commit()
    return redirect(url_for('list'))
@app.route('/login/',methods=['POST','GET'])
def login():
    if request.method == 'POST':
        data = request.form
        name = data['name']
        pwd = data['pwd']
        u = User.query.filter_by(name=name).first()
        if u and check_password_hash(u.pwd,pwd):
            session['user'] = u.name
            session['user_id'] = u.id
            userlog = UserLog(
                user_id=u.id,
                ip=request.remote_addr,
                area="西安"
            )
            db.session.add(userlog)
            db.session.commit()
            return redirect(url_for('list'))
        else:
            flash("密码不正确")
            return redirect(url_for('login'))
    else:
        return render_template('login.html')
@app.route('/logout/')
def logout():
    session.pop('user',None)
    session.pop('user_id',None)
    return redirect(url_for('login'))
@app.route('/')
def index():
    return render_template('base.html')

if __name__ == '__main__':
    app.run(port=8888)

models:该部分会往数据库中添加信息,首先应建立todoflask在数据库中,并且密码必须正确。

添加信息成功后,可以去数据库中查看以下信息。如果信息存在就必须把相应的代码注释掉,

重复添加则会报错。

import random
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
from flask_bootstrap import Bootstrap
from werkzeug.security import generate_password_hash

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值