完成评论功能

    1. 定义评论的视图函数
      @app.route('/comment/',methods=['POST'])
      def comment():
      读取前端页面数据,保存到数据库中
    2. 用<input type="hidden" 方法获取前端的"question_id" 
    3. 显示评论次数
    4. 要求评论前登录
    5. 尝试实现详情页面下的评论列表显示

index.py

import config
from flask import Flask, render_template, url_for, redirect, request,session
from flask_sqlalchemy import SQLAlchemy
from functools import wraps
from datetime import datetime

app = Flask(__name__)
app.config.from_object(config)
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)
    nickname = db.Column(db.String(20))

class Question(db.Model):
    __tablename__='question'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    title=db.Column(db.String(100),nullable=False)
    detail=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'))

class Comment(db.Model):
    __tablename__='comment'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    detail=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'))
    question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
    question = db.relationship('Question', backref=db.backref('comment', order_by=creat_time.desc))
    author=db.relationship('User',backref=db.backref('comment'))


db.create_all()

@app.route('/')
def shouye():
    context={
        'question':Question.query.all()
    }
    return render_template('shouye.html',**context)


@app.route('/pinglun<question_id>')

def pinglun(question_id):
    quest = Question.query.filter(Question.id==question_id).first()
    return render_template('pinglun.html',ques=quest)

def log(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        if session.get('user'):
            return  func(*args,**kwargs)
        else:
            return render_template('denglu.html')
    return wrapper

@app.route('/commemt/',methods=['GET','POST'])
@log
def comment():
    if request.method=='GET':
        return render_template(url_for('pinglun'))
    else:
        comment=request.form.get('new_comment')
        ques_id=request.form.get('question_id')
        auth_id=User.query.filter(User.username == session.get('user')).first().id
        comment=Comment(author_id=auth_id,question_id=ques_id,detail=comment)
        db.session.add(comment)
        db.session.commit()
        return redirect(url_for('pinglun',question_id=ques_id))

@app.route('/zhuce',methods=['GET','POST'])
def zhuce():
    if request.method == 'GET':
        return render_template('zhuce.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        nickname = request.form.get('nickname')
        user1 = User.query.filter(User.username == username).first()
    if user1:
        return 'username existed'
    else:
        user1 = User(username=username, password=password, nickname=nickname)
        db.session.add(user1)
        db.session.commit()
        return redirect(url_for('denglu'))



@app.route('/denglu',methods=['GET','POST'])
def denglu():
    if request.method == 'GET':
        return render_template('denglu.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
            session.permanent = True
            return redirect(url_for('shouye'))
        else:
            return 'password error'
    else:
        return 'username is not existed'



@app.route('/logout/')
def logout():
    session.clear()
    return redirect(url_for('shouye'))



@app.route('/neirong',methods=['GET','POST'])
@log
def fankui():
    if request.method=='GET':
        return render_template('fankui.html')
    else:
        title=request.form.get('title')
        detail=request.form.get('detail')
        author_id=User.query.filter(User.username==session.get('user')).first().id
        question=Question(title=title,detail=detail,author_id=author_id)
        db.session.add(question)
        db.session.commit()
        return redirect(url_for('shouye'))


@app.context_processor
def mycontext():
    usern=session.get('user')
    if usern:
        return {'username':usern}
    else:
        return {}



if __name__ == '__main__':
    app.run(debug='True')
import config
from flask import Flask, render_template, url_for, redirect, request,session
from flask_sqlalchemy import SQLAlchemy
from functools import wraps
from datetime import datetime

app = Flask(__name__)
app.config.from_object(config)
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)
    nickname = db.Column(db.String(20))

class Question(db.Model):
    __tablename__='question'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    title=db.Column(db.String(100),nullable=False)
    detail=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'))

class Comment(db.Model):
    __tablename__='comment'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    detail=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'))
    question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
    question = db.relationship('Question', backref=db.backref('comment', order_by=creat_time.desc))
    author=db.relationship('User',backref=db.backref('comment'))


db.create_all()

@app.route('/')
def shouye():
    context={
        'question':Question.query.all()
    }
    return render_template('shouye.html',**context)


@app.route('/pinglun<question_id>')

def pinglun(question_id):
    quest = Question.query.filter(Question.id==question_id).first()
    return render_template('pinglun.html',ques=quest)

def log(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        if session.get('user'):
            return  func(*args,**kwargs)
        else:
            return render_template('denglu.html')
    return wrapper

@app.route('/commemt/',methods=['GET','POST'])
@log
def comment():
    if request.method=='GET':
        return render_template(url_for('pinglun'))
    else:
        comment=request.form.get('new_comment')
        ques_id=request.form.get('question_id')
        auth_id=User.query.filter(User.username == session.get('user')).first().id
        comment=Comment(author_id=auth_id,question_id=ques_id,detail=comment)
        db.session.add(comment)
        db.session.commit()
        return redirect(url_for('pinglun',question_id=ques_id))

@app.route('/zhuce',methods=['GET','POST'])
def zhuce():
    if request.method == 'GET':
        return render_template('zhuce.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        nickname = request.form.get('nickname')
        user1 = User.query.filter(User.username == username).first()
    if user1:
        return 'username existed'
    else:
        user1 = User(username=username, password=password, nickname=nickname)
        db.session.add(user1)
        db.session.commit()
        return redirect(url_for('denglu'))



@app.route('/denglu',methods=['GET','POST'])
def denglu():
    if request.method == 'GET':
        return render_template('denglu.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
            session.permanent = True
            return redirect(url_for('shouye'))
        else:
            return 'password error'
    else:
        return 'username is not existed'



@app.route('/logout/')
def logout():
    session.clear()
    return redirect(url_for('shouye'))



@app.route('/neirong',methods=['GET','POST'])
@log
def fankui():
    if request.method=='GET':
        return render_template('fankui.html')
    else:
        title=request.form.get('title')
        detail=request.form.get('detail')
        author_id=User.query.filter(User.username==session.get('user')).first().id
        question=Question(title=title,detail=detail,author_id=author_id)
        db.session.add(question)
        db.session.commit()
        return redirect(url_for('shouye'))


@app.context_processor
def mycontext():
    usern=session.get('user')
    if usern:
        return {'username':usern}
    else:
        return {}



if __name__ == '__main__':
    app.run(debug='True')

pinglun.html

<!DOCTYPE html>
<html lang="en">
<head>
    {% extends "text.html" %}
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0-beta/css/bootstrap.css" rel="stylesheet">
</head>
<body>

{% block pinglun %}
<div class="card" style="width: 65rem;margin-top:2% ; margin-left: 23%;">


<div style= >
  <h2 class="card-header" style="margin-bottom: 0" >{{ ques.title }}</h2>
</div>
  <div class="card-body"style="padding-bottom: 1%">
      <h4 class="card-title">{{ ques.author.username }}&nbsp;<small>{{ ques.creat_time }}</small></h4>
      <hr>
      <h5>{{ ques.detail }}</h5>
      <hr>
       <form action="{{ url_for('comment') }}" method="post">
      <div style="width: 50rem;margin-left:6%;margin-top: 3%">
    <textarea  name="new_comment" class="form-control"  rows="10" placeholder="请写下评论" ></textarea><br>
          <input name="question_id" type="hidden" value="{{ ques.id }}"/>
            <button type="submit" class="btn btn-outline-primary ">提交评论</button>
        </div>
       </form>
  </div>
<h5 style="margin-left: 3.5%">评论:</h5>

<div class="" style="width:58rem;margin-left: 4%;height: auto;margin-top: 0.5% ">
    {% for com in ques.comment %}

    <a href="#" >{{ com.author.username }}</a>
    <small>{{ com.creat_time }}</small>
    <p class="">{{ com.detail }}</p>
    {% endfor %}
</div>

</div>


{% endblock %}

</body>
</html>

 

posted on 2017-12-08 14:09  069王国栋  阅读(124)  评论(0编辑  收藏  举报

导航