国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Python+Flask實(shí)戰(zhàn)一個(gè)實(shí)用的留言板Demo

klinson / 2006人閱讀

摘要:混雜著工作室圖片網(wǎng)任務(wù)截至今天終于完成了暑假另一個(gè)任務(wù)把考核任務(wù)按照狗書再寫一遍受益匪淺,路途荊棘叢生。。。。

混雜著工作室圖片網(wǎng)任務(wù),截至今天終于完成了暑假另一個(gè)任務(wù)
把考核任務(wù)按照狗書再寫一遍
受益匪淺,路途荊棘叢生。。。。這里主要記錄了增加的功能,更多的可以看源代碼
代碼
在線預(yù)覽

上傳頭像404
Flask上傳文件
我實(shí)現(xiàn)的主要思路就是,上傳文件到服務(wù)器,然后讀取文件
當(dāng)然你可以用二進(jìn)制存進(jìn)數(shù)據(jù)庫(kù),或者用比較成熟的拓展Flask-Uploads
主要的步驟以前一篇文章寫了 如何實(shí)現(xiàn)圖片上傳API

然后你需要定義訪問(wèn)路由

@main.route("/avatar/")
def get_file(filename):
    return send_from_directory(current_app.config["UPLOAD_FOLDER"],filename) 

一開始的UPLOAD_FOLDER沒有定義清楚,加上os.getcwd()獲取當(dāng)前目錄

UPLOAD_FOLDER= os.getcwd()+"/app/upload/avatar"

如果用的Jinja2模板,在頭像引用處這樣寫就可以了
我這里把頭像地址存到了user數(shù)據(jù)模型中

頭像更換刪除原來(lái)的圖片
if current_user.avatar:
    try:
        os.remove(os.path.join(current_app.config["UPLOAD_FOLDER"],current_user.avatar))
    except OSError:
        return {"error": u"文件不存在"}
使用forgery_py生成測(cè)試數(shù)據(jù)
開發(fā)測(cè)試的時(shí)候經(jīng)常需要大量的數(shù)據(jù),比如下面的用戶模型
shell運(yùn)行,輸入下面的代碼即可
python manage.py shell
>>>User.generate_fake()
@staticmethod
    def generate_fake(count=100): #數(shù)量100
        from sqlalchemy.exc import IntegrityError
        from random import seed
        import forgery_py  #生成虛擬數(shù)據(jù)所需要的庫(kù)

        seed()
        for i in range(count):
            u = User(username=forgery_py.internet.user_name(True),
                    location=forgery_py.address.city(),
                    about_me=forgery_py.lorem_ipsum.sentence(),
                    password=forgery_py.lorem_ipsum.word())
            db.session.add(u)
            try:
                db.session.commit()
            except IntegrityError:
                db.session.rollback()
用profile協(xié)助程序性能優(yōu)化

前輩博客
啟動(dòng)方式python manage.py profile

@manager.command
def profile(length=25, profile_dir=None):
    from werkzeug.contrib.profiler import ProfilerMiddleware
    app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length],
                                      profile_dir=profile_dir)
    app.run()    
定義匿名用戶

定義

from flask_login import AnonymousUserMixin
class AnonymousUser(AnonymousUserMixin):
    def __init__(self):
        self.username = "游客"

login_manager.anonymous_user = AnonymousUser

判斷當(dāng)前用戶是否是匿名用戶

current_user.is_anonymous() #bool型
if的時(shí)候用current_user.is_anonymous

Jinja模板中

{% if current_user.is_authenticated() %}
  Hi {{ current_user.name }}!
{% endif %}
AttributeError: "User" object has no attribute "is_active"
User需要繼承UserMixin,并添加一個(gè)user_loader
from flask_login import UserMixin

class User(db.Model, UserMixin):
    pass

@login_manager.user_loader
def load_user(userid):
    return User.query.get(int(userid))
使用markdown同步實(shí)現(xiàn)markdown

首先在create_app中初始化PageDown
forms輸入部分定義為PageDownField
from flask_pagedown import PageDown
pagedown = PageDown()
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    pagedown.init_app(app)
    ...
Jinja2中引入
{% block scripts %}
{{ super() }}
{{ pagedown.include_pagedown() }}
{% endblock %}
模型中為了安全,防止惡意標(biāo)簽
首先,markdown() 函數(shù)初步把Markdown 文本轉(zhuǎn)換成HTML
然后,把得到的結(jié)果和允許使用的HTML 標(biāo)簽列表傳給clean() 函數(shù)
clean() 函數(shù)刪除所有不在白名單中的標(biāo)簽
轉(zhuǎn)換的最后一步由linkify() 函數(shù)完成,這個(gè)函數(shù)由Bleach 提供
把純文本中的URL 轉(zhuǎn)換成適當(dāng)?shù)逆溄?/pre>
class Post(db.Modle):
    ....
    #處理富文本,將Markdown格式轉(zhuǎn)換為Html
    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        allowed_tags = ["a", "abbr", "acronym", "b", "blockquote", "code",
                        "em", "i", "li", "ol", "pre", "strong", "ul",
                        "h1", "h2", "h3", "p"]
        target.body_html = bleach.linkify(bleach.clean(
            markdown(value, output_format="html"),
            tags=allowed_tags, strip=True))

db.event.listen(Post.body, "set", Post.on_changed_body)#實(shí)時(shí)監(jiān)聽

能記住的大概就這些了,其他的都是很雜的錯(cuò)誤,不管怎么說(shuō),也是次經(jīng)歷了

首發(fā)于我的博客用Python+Flask實(shí)戰(zhàn)一個(gè)實(shí)用的留言板Demo
參考鏈接:bestallen的博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40999.html

相關(guān)文章

  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---6、Web庫(kù)安裝:Flask、Tornado

    摘要:在本書中用到的一些服務(wù)程序主要有。本節(jié)來(lái)分別介紹它們的安裝方法。的安裝是一個(gè)輕量級(jí)的服務(wù)程序,簡(jiǎn)單易用靈活,在本書中我們主要用它來(lái)做一些服務(wù),本節(jié)我們來(lái)了解下它的安裝方式。相關(guān)鏈接官方文檔安裝執(zhí)行完畢之后即可完成安裝。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---5、存儲(chǔ)庫(kù)的安裝:PyMySQL、PyMongo、RedisPy、RedisDump下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)-...

    yeyan1996 評(píng)論0 收藏0
  • Flask Web 開發(fā)實(shí)戰(zhàn)筆記

    摘要:開發(fā)實(shí)戰(zhàn)筆記安裝和使用虛擬環(huán)境虛擬環(huán)境是解釋器的一個(gè)私有副本,在這個(gè)環(huán)境中你可以安裝私有的包,而且不會(huì)影響系統(tǒng)中安裝的全局的解釋器。處理和函數(shù)之間關(guān)系的程序稱為路由。例如在請(qǐng)求開始時(shí),我們需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)連接或認(rèn)證發(fā)起請(qǐng)求的用戶。 幾天前和同事一起喝酒,大家談到為什么開始讀書這件事。這里所說(shuō)的讀書不是專業(yè)的書籍,而是一些閑書。結(jié)果發(fā)現(xiàn)原來(lái)我們開始讀書的原因很功利。都是因?yàn)樯钪杏龅搅死?..

    羅志環(huán) 評(píng)論0 收藏0
  • 極客愛情: 情人節(jié)禮物大作戰(zhàn)

    摘要:故而總結(jié)如下編成的代碼浪漫的環(huán)境親手制作的禮物注意請(qǐng)將下面的程序員的情人節(jié)禮物換成語(yǔ)言。言歸正傳程序員的情人節(jié)禮物入門之材料構(gòu)思情人節(jié)禮物之設(shè)備展示想著在這個(gè)移動(dòng)盛行的時(shí)代,再用電腦就不太合適了。 是時(shí)候應(yīng)該反擊了 當(dāng)我看到@鄢得諼草 的那幾篇黑我黑到體無(wú)完膚的#極客愛情# @Phodal 故事的時(shí)候,我發(fā)現(xiàn)我竟無(wú)言以對(duì)?;蛟S,作為一名程序員,我們或多或少都有這樣的共性。 ...

    XGBCCC 評(píng)論0 收藏0
  • 蠎周刊 2015 年度最贊

    摘要:蠎周刊年度最贊親俺們又來(lái)回顧又一個(gè)偉大的年份兒包去年最受歡迎的文章和項(xiàng)目如果你錯(cuò)過(guò)了幾期就這一期不會(huì)丟失最好的嗯哼還為你和你的準(zhǔn)備了一批紀(jì)念裇從這兒獲取任何時(shí)候如果想分享好物給大家在這兒提交喜歡我們收集的任何意見建議通過(guò)來(lái)吧原文 Title: 蠎周刊 2015 年度最贊Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...

    young.li 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<