发布功能完成。
- 编写要求登录的装饰器
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,request,render_template,redirect,url_for,session from flask_sqlalchemy import SQLAlchemy import sqlconnect from functools import wraps from datetime import datetime app = Flask(__name__) app.config.from_object(sqlconnect)#app连接数据库 db = SQLAlchemy(app) class User(db.Model): __tablename__ ='user1' 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) #againpass = db.Column(db.String(20), nullable=False) class Question(db.Model): __tablename__='question' id = db.Column(db.Integer,primary_key=True,autoincrement=True) author_id = db.Column(db.Integer,db.ForeignKey('user1.id')) 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 = db.relationship('User', backref=db.backref('questions')) # db.create_all() #增加 # user = User(username ='xxxxx1',password ='123456') # db.session.add(user) # db.session.commit() #查找 # user = User.query.filter(User.username =='xxxxx1').first() # user.password ='123456' # user.againpass='123456' # print(user.id,user.username,user.password) #删除 # user = User.query.filter(User.username =='xxxxx1').first() # db.session.delete(user) # db.session.commit() @app.route('/') def first(): return render_template("first.html") def login_re(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.context_processor def mycontext(): usern = session.get('user') if usern: return{'username':usern} else: return {} @app.route('/logout/') def logout(): session.clear() return redirect(url_for('first')) @app.route("/login/",methods=['GET','POST']) def sign_in(): if request.method =='GET': return render_template("sign_in.html") else: name = request.form.get('name') passw = request.form.get('password') user = User.query.filter(User.username == name).first() #判断用户名是否存在 if user: #判断密码是否正确 if user.password == passw: session['user']=name#记住用户名 return redirect(url_for('first')) else: return u'密码错误!' else: return u'不存在该用户名!' @app.route("/regiter/",methods=['GET','POST']) def sign_up(): if request.method == 'GET': return render_template("sign_up.html") else: name = request.form.get('newname') passw = request.form.get('newpass') samename = User.query.filter(User.username == name).first() if samename: return u'username existed!' else: # 将用户名和密码存入数据库 users =User(username = name ,password = passw) db.session.add(users) db.session.commit() return render_template("sign_in.html")#注册成功后跳转到登录界面 @app.route("/question/",methods=['GET','POST']) @login_re def question(): if request.method=='GET': return render_template("wenda.html") else: wenti = request.form.get('q') xiangqin = request.form.get('d') questions = Question(title =wenti,detail = xiangqin) db.session.add(questions) db.session.commit() return render_template("first.html") if __name__ == '__main__': app.run(debug=True)
{% extends 'base.html' %} {% block title %} 发布问答 {% endblock %} {% block head %} <link href="../static/wenda.css" rel="stylesheet" type="text/css"> <script src="../static/wenda.js"></script> {% endblock %} {% block main %} <h2 style="text-align:center; font-family:华文行楷" >发布问答</h2> <form action="http://127.0.0.1:5000/question/" method="post" style="align-content: left"> <div class="wendakuang"> <label for="zhuyao" class="wenzi" >问题</label> <br> <textarea class="zhuyaoneirong" rows="1" cols="65" id="zhuyao" name="q"></textarea> <br> <br> <label for="xiangqing" class="wenzi">详情</label> <br> <textarea class="neirong" rows="5" cols="65" id="xiangqing" name="d"></textarea> <br> <br> <button onclick="return myQuestion()">发布</button> </div> </form> {% endblock %}


浙公网安备 33010602011771号