發佈功能完成

  • 編寫要求登陸的裝飾器

from functools import wrapscss

def loginFirst(func): #參數是函數html

@wraps(func)web

      def wrapper(*args, ** kwargs): #定義個函數將其返回sql

          #要求登陸數據庫

          return func(*args, ** kwargs)flask

      return wrapper #返回一個函數session

  • 應用裝飾器,要求在發佈前進行登陸,登陸後可發佈。
@app.route('/question/',methods=['GET','POST'])
@loginFirst
def question():

 

  • 創建發佈內容的對象關係映射。
class Question(db.Model):
  • 完成發佈函數。

保存到數據庫。app

重定向到首頁。函數

 

{% extends'myweb.html' %}
{% block questiontitle %}提問頁面{% endblock %}


{% block questionhead %}
<link rel="stylesheet" type="text/css" href="../static/css/myweb.css"/>
<script src="../static/js/question.js"></script>
{% endblock %}

{% block questiontbody %}
<form action="{{ url_for('question') }}" method="post">
<div class="form-group">
<!--<label for="name">選擇列表</label>-->
<!--<select class="form-control">-->
<!--<option>1</option>-->
<!--<option>2</option>-->
<!--<option>3</option>-->
<!--<option>4</option>-->
<!--<option>5</option>-->
<!--</select>-->

<label for="questionTitle">標題</label>
<textarea class="form-control" rows="1" id="questionTitle"></textarea>
<label for="questionDatail">詳情</label>
<textarea class="form-control" rows="5" id="questionDatail"></textarea>
<input type="checkbox" name="c1" id="c1" value="">記住我
<br>
<div id=""><br></div>
<button class="btn btn-default" style="color:black" type="submit" onclick="return fnQuestion()">發佈</button>
</div>
</form>
{% endblock %}
from flask import Flask, render_template, url_for, redirect, request,session
from flask_sqlalchemy import SQLAlchemy
from functools import wraps
import config
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'))
db.create_all()


# 增長
# user = User(username='tan1997',password='19961021')
# db.session.add(user)
# db.session.commit()

# 查詢
# user = User.query.filter(User.username == 'tan1997').first()
# print(user.username,user.password)

# 修改
# user=User.query.filter(User.username == 'tan1997').first()
# user.password=1234567
# db.session.commit()

# 刪除
# user=User.query.filter(User.username == 'tan1997').first()
# db.session.delete(user)
# db.session.commit()

@app.route('/')
def myweb():
    return render_template("myweb.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
                session.permannet = True
                return redirect(url_for('myweb'))
            else:
                return '密碼錯誤'
        else:
            return '用戶名不存在'


@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('myweb'))

@app.route('/regist/', methods=['GET', 'POST'])
def regist():
    if request.method == 'GET':
        return render_template("regist.html")
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        nickname = request.form.get('nickname')
        user = User.query.filter(User.username == username).first()
        if user:
            return ' 用戶名已存在'
        else:
            user = User(username=username, password=password, nickname=nickname)
            db.session.add(user)  # 數據庫,添加操做
            db.session.commit()
            return redirect(url_for('login'))
def loginFirst(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'])
@loginFirst
def question():
    if request.method=='GET':
        return render_template('question.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('myweb'))


if __name__ == '__main__':
    app.run(debug=True)
function fnQuestion() {
    var title =document.getElementById("title")
    var detail = document.getElementById("detail")
    var creat_time=document.getElementById("creat_time")
    var author_id =document.getElementById("author_id")
    var author=document.getElementById("author")
    var isError = true;
     if (title.value.length > 100 || oUpass.value.length < 0) {
        oError.innerHTML = "問題請輸入100位之內字符"
        isError = false;
    }
        return isError;
    return isError;
}
相關文章
相關標籤/搜索