从首页问答标题到问答详情页
- 主PY文件写视图函数,带id参数。
@app.route('/detail/<question_id>')
def detail(question_id):
quest =
return render_template('detail.html', ques = quest)from flask import Flask,render_template,request,redirect,url_for,session from flask_sqlalchemy import SQLAlchemy import config from datetime import datetime from functools import wraps 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) db.create_all() 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) authorID=db.Column(db.Integer,db.ForeignKey('User.id')) author=db.relationship('User',backref=db.backref('question')) db.create_all() class Comment(db.Model): __tablname__='comment' id = db.Column(db.Integer, primary_key=True, autoincrement=True) authorID = db.Column(db.Integer, db.ForeignKey('User.id')) questionID = db.Column(db.Integer, db.ForeignKey('Question.id')) detail = db.Column(db.Text, nullable=False) creat_time = db.Column(db.DateTime, default=datetime.now) question=db.relationship('Question', backref=db.backref('commment',order_by=creat_time.desc)) author = db.relationship('User', backref=db.backref('comment')) db.create_all() @app.route('/') def home(): context={ 'question': Question.query.all() } return render_template('shouye.html',**context) @app.route('/detail/<question_id>') def detail(question_id): quest=Question.query.filter(Question.id==question_id).first() return render_template('detail.html',ques=quest) @app.route('/sign_in/',methods=['GET','POST']) def sign_in(): 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('home')) else: return 'password error' else: return 'username is not existed.' @app.route('/sign_up/',methods=['GET','POST']) def sign_up(): if request.method == 'GET': return render_template('zhuce.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: user1 = User(username=username, password=password) db.session.add(user1) db.session.commit() return redirect(url_for('home')) @app.context_processor def mycontext(): username=session.get('user') if username: return {'username':username} else: return {} @app.route('/logout/') #注销 def logout(): session.clear() return redirect(url_for('home')) def loginFirst(func): @wraps(func) def wrapper(*args,**kwargs): if session.get('user'): return func(*args, **kwargs) else: return redirect(url_for('sign_in')) return wrapper @app.route('/question/',methods=['GET','POST']) @loginFirst def question(): if request.method == 'GET': return render_template('question.html') else: title = request.form.get('title') detail = request.form.get('detail') authorID =User.query.filter(User.username == session.get('user')).first().id user = User.query.filter(User.username == session.get('user')).first() question = Question.query.filter(Question.title == title).first() if question: return 'question existed' else: questions = Question(title=title, detail=detail, authorID=authorID) questions.author = user db.session.add(questions) db.session.commit() return redirect(url_for(('home'))) if __name__ == '__main__': app.run(debug=True)
- 首页标题的标签做带参数的链接。
{{ url_for('detail',question_id = foo.id) }}
{% extends'base.html' %} {% block title %} Home {% endblock %} {% block head %} <link rel="stylesheet" href="{{ url_for('static',filename='css/shouye.css')}}" type="text/css"> {% endblock %} {% block main %} <body> <br> {#<img id="pig" src="../static/images/pig.jpg">#} <ul class="comment"style=";list-style:none"> <img class="comment_pic" src="../static/images/comment.png"> <p class="wenzi">Question</p> {% for foo in question %} <li class="detail" > <span class="icon" aria-hidden="true"><img src="../static/images/icon.jpg"></span> <a href="#" style="float: left;margin:3px auto; line-height:12px;">{{ foo.author.username }}</a> <span class="badge">{{ foo.creat_time }}</span> <br><hr> <a href="{{ url_for('detail',question_id=foo.id) }}" class="title"> {{ foo.title }}</a> <p class="neirong"> {{ foo.detail }}</p> </li> {% endfor %} </ul> </body> {% endblock %}
- 在详情页将数据的显示在恰当的位置。
{{ ques.title}}
{{ ques.id }}{{ ques.creat_time }}{{ ques.author.username }}
{{ ques.detail }}{% extends'base.html' %} {% block title %} Home {% endblock %} {% block head %} <link rel="stylesheet" href="{{ url_for('static',filename='css/detail.css')}}" type="text/css"> {% endblock %} {% block main %} <body> <div class="detail"> <div class="detail_left"> <h2>{{ ques.title }}</h2> <a>{{ ques.author.username }}</a> <span class="badge">{{ ques.creat_time }}</span> <hr> <a>{{ ques.detail }}</a> <hr> <textarea name='comment' class="form-control" rows="8" id="questionDetail"></textarea> <br><button class="btn-default">发布</button> <p>评论:{{ ques.comments }}</p> <li class="comment"> <span class="icon" aria-hidden="true"><img src="../static/images/icon.jpg"></span> <a href="#" style="float: left;margin:3px auto; line-height:12px;">username</a> <span class="badge2">creat_time</span> <br><hr> <p class="neirong">detail</p> </li> <li class="comment"> <span class="icon" aria-hidden="true"><img src="../static/images/icon.jpg"></span> <a href="#" style="float: left;margin:3px auto; line-height:12px;">username</a> <span class="badge2">creat_time</span> <br><hr> <p class="neirong">detail</p> </li> </div> </div> </body> {% endblock %}
-
建立评论的对象关系映射:
class Comment(db.Model):
__tablename__='comment'from flask import Flask,render_template,request,redirect,url_for,session from flask_sqlalchemy import SQLAlchemy import config from datetime import datetime from functools import wraps 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) db.create_all() 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) authorID=db.Column(db.Integer,db.ForeignKey('User.id')) author=db.relationship('User',backref=db.backref('question')) db.create_all() class Comment(db.Model): __tablname__='comment' id = db.Column(db.Integer, primary_key=True, autoincrement=True) authorID = db.Column(db.Integer, db.ForeignKey('User.id')) questionID = db.Column(db.Integer, db.ForeignKey('Question.id')) detail = db.Column(db.Text, nullable=False) creat_time = db.Column(db.DateTime, default=datetime.now) question=db.relationship('Question', backref=db.backref('commment',order_by=creat_time.desc)) author = db.relationship('User', backref=db.backref('comment')) db.create_all() @app.route('/comment/',methods=['POST']) @login_re def comment(): if request.method == 'GET': return render_template('detail.html') else: detail = request.form.get('detail') question_id = User.query.filter(User.username == session.get('user')).first().id comment = Comment( detail=detail, question_id=question_id) db.session.add(comment) db.session.commit() return redirect(url_for('index')) def login_re(func): @wraps(func) def wrapper(*args, **kwargs): if session.get('comment'): return func(*args,**kwargs) else: return redirect(url_for('login')) return wrapper @app.route('/') def home(): context={ 'question': Question.query.all() } return render_template('shouye.html',**context) @app.route('/detail/<question_id>') def detail(question_id): quest=Question.query.filter(Question.id==question_id).first() return render_template('detail.html',ques=quest) @app.route('/sign_in/',methods=['GET','POST']) def sign_in(): 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('home')) else: return 'password error' else: return 'username is not existed.' @app.route('/sign_up/',methods=['GET','POST']) def sign_up(): if request.method == 'GET': return render_template('zhuce.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: user1 = User(username=username, password=password) db.session.add(user1) db.session.commit() return redirect(url_for('home')) @app.context_processor def mycontext(): username=session.get('user') if username: return {'username':username} else: return {} @app.route('/logout/') #注销 def logout(): session.clear() return redirect(url_for('home')) def loginFirst(func): @wraps(func) def wrapper(*args,**kwargs): if session.get('user'): return func(*args, **kwargs) else: return redirect(url_for('sign_in')) return wrapper @app.route('/question/',methods=['GET','POST']) @loginFirst def question(): if request.method == 'GET': return render_template('question.html') else: title = request.form.get('title') detail = request.form.get('detail') authorID =User.query.filter(User.username == session.get('user')).first().id user = User.query.filter(User.username == session.get('user')).first() question = Question.query.filter(Question.title == title).first() if question: return 'question existed' else: questions = Question(title=title, detail=detail, authorID=authorID) questions.author = user db.session.add(questions) db.session.commit() return redirect(url_for(('home'))) if __name__ == '__main__': app.run(debug=True)
-
尝试实现发布评论
-