发布功能完成(2017.11.28)

1、编写要求登录的装饰器

from functools import wraps

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

@wraps(func)

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

#要求登录

return func(*args, ** kwargs)

return wrapper #返回一个函数

2、应用装饰器,要求在发布前进行登录,登录后可发布。

@app.route(‘/question/‘,methods=[‘GET‘,‘POST‘])@loginFirstdef question():
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(‘base‘))

3、完成发布函数。

保存到数据库。

重定向到首页。

{% extends ‘base.html‘ %}
{% block title %}发布区{% endblock %}
{% block head %}
    <link rel="stylesheet" type="text/css" href="../static/css/index.css">
{% endblock %}
{% block main %}
    <h1>发布问答</h1>
    <form action="{{ url_for(‘login‘) }}" method="post">
        <div class="box">
            <label for="question">问题</label><br>
            <textarea class="form-control" rows="4" id="question" placeholder="问题" name="title" id="title"
                      style="height: 50px"></textarea>
            <label for="questionDetail">详情</label><br>
            <textarea class="form-control" rows="4" id="questionDetail" placeholder="详细评论" name="detail" id="detail"
                      style="height: 130px"></textarea>
        </div>
        <br>
        <div class="input-area">
            <button type="submit" class="btn btn-default">发布</button>
        </div>
    </form>
{% endblock %}

4、建立发布内容的对象关系映射。

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

时间: 2024-11-10 09:47:53

发布功能完成(2017.11.28)的相关文章

2017/11/28学习总结

1.浏览器css html js书写一般采用绝对路径 ${pageContext.request.contextPath} <%=request.getContextPath()%> 可以获取配置的应用程序名2. redirectPort端口的作用 http协议是不安全的 https协议是安全的 配置好SSL之后可以用过https协议通信 需要安全通信的场合,将把客户请求转发至SSL的redirectPort端口 3.Context表示上下文,代表的就是一个JavaWeb应用,Context元

2017/11/28

1. 浮动的元素脱离了文档流,包围图片和文本的div不占据空间.如果,想让包围,需要在这个元素的某个地方应用clear.如 <div class="news"> <img src="atol.jpg" width="120" height="180" /> <p>One of the most impressive flights ever has to be landing at Male

51CTO学院新课发布~~带你遇见更好的自己(九)(2017.11.04-12.17)

新的一周新的失望,大家好,你们的毒鸡汤姐又华丽丽的上线了.今天想跟大家聊聊这个投资.为什么要说这个呢?因为最近小编的妈妈(一位三四线小城市的中年妇女),居然开始玩区域链了,这使得小编不寒而栗,毕竟我现在都没彻底搞清楚区域链.曾记得我是2014年的时候开始听说比特币,身边有买比特币的朋友也一直跟我分享他们的喜悦.因为今年比特币的大幅上涨,形成了一种投资热潮.随之而来的区域链.加密货币等等获得了更多投资者的关注.不少投资者开始寻找下一个比特币,于2011年推出的莱特币或许是其中一个备选.曾经莱特币在

51CTO学院新课发布~~带你遇见更好的自己(六)(2017.11.20-11.26)

 一周的时间匆匆即逝,又到了给你们出新课列表的时候了,小编每周都辛苦的给你们推课,也不几道你们到底看了没,想到小编之前做讲师的时候,那可是一把鼻涕一把泪的催着同学们学习. 有个段子特别能描述当时的心情:"老师这个职业吧,说的文明点就是每天带着学生在知识的海洋里畅游.然而畅游一段时间吧,你会发现:只有你一个人上岸了!!!!!!!然后你还得返回,一个一个去捞.有些吧,昨天捞上来今天又掉下去了还得捞.在你喘息的时候,你会惊恐地发现:还有往回游的".So,跟我一起游往这周的新课列表吧,锵锵锵~

51CTO学院新课发布~~带你遇见更好的自己(七)(2017.11.27-12.03)

以往新课发布的开场白,都是小编姐姐逗比的闲扯,小编姐姐准备转变一下画风,以后的新课发布开场白就谈谈每周我对于职场或者生活的一点小理解吧. 上周看到一篇文章,关于人和人的身价的差距:职场10年,为什么有人已经当上了董事总经理,而有的人还是资深销售经理?为什么有人已经当上了架构师,而有的人还是资深技术人员?为什么有人已经身价数十亿美金,而有的人还在为竞争总监头衔而周游于人情场?人和人的身价几倍甚至几十倍的差距,真的就只是智商.教育背景.能力.勤奋程度所决定的吗?当然不是.更大程度上是由个人的价值观.

【第三组】冲刺会议 2017.7.28

冲刺会议 日期:2017.7.28 开发小组:Geomestry 冲刺经理:程立智 成员: 程立智 李明伦 郑昊 蔡镇泽 温志成 汪涵 成员:程立智 完成工作:实现主界面动画,修正多语言bug,添加BGM音量控制和播放暂停功能 所遇问题:通宵贼困 下一步工作: 继续实现各种界面的细节和前后端的联系,解决大家遇到的各种系统bug 成员:李明伦 完成工作:写中英文关卡说明 所遇问题:人工翻译比较困难 下一步工作:具体实现关卡 成员:郑昊 完成工作:做主界面图片,option自适应,滑块功能 所遇问题

SharePoint 2013跨网站集发布功能简介

在SharePoint Server 2013网站实施中,我们经常会遇到跨网站集获取数据,而2013的这一跨网站集发布功能,正好满足我们这样的需求. 使用SharePoint 2013中的跨网站发布,我们可以使用列表和其他库来存储在发布网站上重复使用的内容,通过内容搜索部件来读取配置的跨网站集信息,下面,让我们通过一个简单的例子,了解一下这一功能吧! 1.使用SharePoint 2013跨网站集发布功能,首先需要在源网站和目标网站开启Cross-Site Collection Publishi

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

[LOJ 6249]「CodePlus 2017 11 月赛」汀博尔

Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不能为树的一部分).现在问你最少需要等多少个月才能满足订单. Input 第一行 3 个用空格隔开的非负整数 n,S,L,表示树的数量.订单总量和单块木料长度限制.第二行 n 个用空格隔开的非负整数,依次为 H1,H2,…,Hn.第三行 n 个用空格隔开的非负整数,依次为 A1,A2,…,An. Ou