博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发布功能完成
阅读量:5115 次
发布时间:2019-06-13

本文共 3643 字,大约阅读时间需要 12 分钟。

  • 编写要求登录的装饰器

from functools import wraps

def loginFirst(func): #参数是函数

@wraps(func)

      def wrapper(*args, ** kwargs): #定义个函数将其返回

          #要求登录

          return func(*args, ** kwargs)

      return wrapper #返回一个函数

  • 应用装饰器,要求在发布前进行登录,登录后可发布。
@app.route('/question/',methods=['GET','POST']) @loginFirst def question():
  • 建立发布内容的对象关系映射。
class Question(db.Model):
  • 完成发布函数。

保存到数据库。

重定向到首页。

from flask import Flask,render_template,request,redirect,url_for,sessionfrom flask_sqlalchemy import SQLAlchemyfrom functools import wrapsfrom datetime import datetimeimport configapp = Flask(__name__)app.config.from_object(config)db=SQLAlchemy(app)db = SQLAlchemy(app)# 创建用户模型class User(db.Model):    __tablename__ = 'user'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    username = db.Column(db.String(20), nullable=False)    password = db.Column(db.String(20), nullable=False)class Question(db.Model):    __tablename__ = 'question'    id = db.Column(db.Integer, primary_key=True, autoincrement=True)    question = db.Column(db.String(100), nullable=False)    questionDetail = db.Column(db.Text, nullable=False)    creat_time = db.Column(db.DateTime, default=datetime.now)    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))    author = db.relationship('User', backref=db.backref('question'))#db.create_all()@app.route('/')def homepage():    return render_template("homepage.html")@app.route('/login/',methods=['GET','POST'])def login():    if request.method == "GET":        return render_template("login.html")    else:        username = request.form.get("username")        password = request.form.get("password")        user = User.query.filter(User.username == username).first()        if user:            if user.password == password:                session['user'] = username                sessionpermanent = True                return redirect(url_for('homepage'))            else:                return 'password error'        else:            return 'username is not existed'@app.route("/register/",methods=['GET','POST'])def register():    if request.method == "GET":        return render_template("register.html")    else:        username = request.form.get("username")        password = request.form.get("password")        user = User.query.filter(User.username == username).first()        if user:            return 'username existed.'        else:            user = User(username=username, password=password)            db.session.add(user)            db.session.commit()            return redirect(url_for('login'))@app.context_processordef mycontext():    usern = session.get('user')    if usern:        return {'username':usern}    else:        return {}@app.route('/logout/')def logout():    session.clear()    return render_template("homepage.html")def log(func): #参数是函数    @wraps(func)    def wrapper(*args, **kwargs): #定义个函数将其返回        if session.get('user'):            return func(*args, **kwargs)        else:            return redirect(url_for('login'))    return wrapper #返回一个函数@app.route('/question/', methods=['GET' , 'POST'])@logdef question():    if request.method == 'GET':        return render_template('question.html')    else:        question = request.form.get('question')        questionDetail = request.form.get('questionDetail')        author_id = User.query.filter(User.username == session.get('user')).first().id        question = Question(question = question, questionDetail = questionDetail, author_id = author_id)        db.session.add(question)        db.session.commit()        return redirect(url_for('homepage'))if __name__ == '__main__':     app.run(debug=True)

转载于:https://www.cnblogs.com/JaTae/p/7910320.html

你可能感兴趣的文章
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>