Python學習筆記-第18天:實戰(zhàn)練習(5)

第十八天 實戰(zhàn)練習(5)

今天計劃用Python繼續(xù)一個web開發(fā)的實戰(zhàn)項目練習吵血,學習項目及練習源碼地址:
GitHub源碼

文章內容的編寫與提交

富文本編輯器

我選擇了TinyMCE,原因很簡單,用的人多怜校,而且支持的瀏覽器多,這兩個理由足夠了鸣剪。
雖然中文文檔比較少揩悄,但這個不是重要的,做一個東西弊添,兼容性還是要考慮下的录淡。

使用起步:

首先,需要下載一份copy油坝,

然后:

<script src="/static/tinymce/tinymce.min.js"></script>

其次:將TinyMCE初始化為頁面的一部分

<!DOCTYPE html>
<html>
<head>
  <script src='/static/tinymce/tinymce.min.js'></script>
  <script>
  tinymce.init({
    selector: '#mytextarea'
  });
  </script>
</head>

<body>
<h1>TinyMCE快速開始示例</h1>
  <form method="post">
    <textarea id="mytextarea">Hello, World!</textarea>
  </form>
</body>
</html>

最后:數(shù)據(jù)提交

當form提交時嫉戚,TinyMCE會將內容塞進textarea刨裆,你可以通過正常的post方法獲取到編輯器中的內容,行為與普通textarea完全一致彬檀。

一個內聯(lián)示例:

<div>
    <div id="doc-app" style="display: block;">
                <div class="toolbar"></div>
                <div class="box">
                    <div class="tit"><input type="text" placeholder="請輸入標題……"></div>
                    <div class="doc-cnt mce-content-body mce-edit-focus" id="tinydemo-doc" contenteditable="true" spellcheck="false" style="position: relative;"><blockquote><ul><li style="text-align: justify;" data-mce-style="text-align: justify;">在這里輸入文字</li></ul></blockquote></div>
                </div>
            </div>
 </div>
<script>
 tinymce.init({
                selector: '#tinydemo-doc',
                language:'zh_CN',
                menubar:false,
                inline: true,
                plugins: 'print preview searchreplace autolink fullscreen image link media code codesample table charmap hr pagebreak nonbreaking anchor advlist lists textpattern help emoticons autosave bdmap indent2em lineheight formatpainter axupimgs',
                toolbar: 'code undo redo restoredraft | cut copy | forecolor backcolor bold italic underline strikethrough link | alignleft aligncenter alignright alignjustify | bullist numlist blockquote subscript superscript removeformat | \
                    formatselect fontselect fontsizeselect | \
                    table image media charmap emoticons hr pagebreak print preview | fullscreen | bdmap indent2em lineheight formatpainter axupimgs',
                fixed_toolbar_container:'#doc-app .toolbar',
                custom_ui_selector: 'body',
                //auto_focus: true,
                toolbar_drawer: false,
                toolbar_sticky: true,
                autosave_ask_before_unload: false,
                fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px',
                font_formats: '微軟雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;蘋果蘋方=PingFang SC,Microsoft YaHei,sans-serif;宋體=simsun,serif;仿宋體=FangSong,serif;黑體=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats;知乎配置=BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, sans-serif;小米配置=Helvetica Neue,Helvetica,Arial,Microsoft Yahei,Hiragino Sans GB,Heiti SC,WenQuanYi Micro Hei,sans-serif',
                images_upload_base_path: '/demo',
                images_upload_handler: function (blobInfo, succFun, failFun) {
                    succFun('/demo/images/img.jpg');
                },
                init_instance_callback: function(editor){
                    $('#doc-app').fadeIn(1500);
                    editor.execCommand('selectAll');
                    editor.selection.getRng().collapse(false);
                    editor.focus();
                }
            });
</script>

圖片上傳

設置初始化參數(shù):images_upload_handler:upload_pic

var upload_pic = function (blobInfo, succFun, failFun) { 
            var file = blobInfo.blob();//轉化為易于理解的file對象
            var formData = new FormData();
            formData.append('file', file, file.name );//此處與源文檔不一樣
         
            console.log(formData.get('file')); //FormData私有類對象帆啃,訪問不到,可以通過get判斷值是否傳進去
            var config = {
                headers: { 'Content-Type': 'multipart/form-data' }
            };  //添加請求頭
            axios.post('/upload', formData, config)
                .then(response => {        
                    console.log(response.data);
                    succFun(response.data.filename);
                })
                .catch(error=>{
                    failFun(error)
                })
        }

圖片處理服務端示例:

@post('/upload')
async def storefile(request):
    try:
        reader = await request.multipart()
        file = await reader.next()

        exts = ['.jpg','.jpeg','.png','.gif','.bpm']
        filename = file.filename if file.filename else 'undefined'
        suffix = os.path.splitext(filename)
        filename = '{}{}'.format(short_uuid(),suffix[1])
        filepath = '{}/{}'.format(config.app.uploaddir,filename)
        size = 0
        with open(filepath, 'wb') as f:
            while True:
                chunk = await file.read_chunk()  # 默認是8192個字節(jié)窍帝。
                if not chunk:
                    break
                size += len(chunk)
                f.write(chunk)
        text = {'res': '上傳成功','filename':'{}{}'.format('/static/uploads/',filename)}
        result = text
        return result
    except Exception as e:
        print(e)
        result = {'success':False,'error': e}
        return result

文件上傳

類似于圖片上傳努潘,這里不再舉例

文檔內容的保存

設置初始化參數(shù):save_onsavecallback: saveConent

前端js代碼:

var saveConent =  function (el) {
            // do the work on html
            var title = $('#b_title').val();
            var content = el.getContent()
            
            var data = {
                title: title || "",
                content: content || ""
            } 
            console.log(data);
            axios.post('/b/0',data)
            .then(res=>{
                console.log(res);
            })
            .catch(err=>{
                console.log(err);
            })
        }

后端處理:

'''
還沒有作入數(shù)據(jù)庫的處理,這里需要用戶信息坤学,所以需要處理session判定用戶的合法性等
'''
@post('/b/{id}')
async def save_content(*,id,title,content,request):
    result = {'success':False}
    return result
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末疯坤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拥峦,更是在濱河造成了極大的恐慌贴膘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件略号,死亡現(xiàn)場離奇詭異,居然都是意外死亡洋闽,警方通過查閱死者的電腦和手機玄柠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诫舅,“玉大人羽利,你說我怎么就攤上這事】福” “怎么了这弧?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虚汛。 經常有香客問我匾浪,道長,這世上最難降的妖魔是什么卷哩? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任蛋辈,我火速辦了婚禮,結果婚禮上将谊,老公的妹妹穿的比我還像新娘冷溶。我一直安慰自己,他們只是感情好尊浓,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布逞频。 她就那樣靜靜地躺著,像睡著了一般栋齿。 火紅的嫁衣襯著肌膚如雪苗胀。 梳的紋絲不亂的頭發(fā)上襟诸,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音柒巫,去河邊找鬼励堡。 笑死,一個胖子當著我的面吹牛堡掏,可吹牛的內容都是我干的应结。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泉唁,長吁一口氣:“原來是場噩夢啊……” “哼鹅龄!你這毒婦竟也來了?” 一聲冷哼從身側響起亭畜,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扮休,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拴鸵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玷坠,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年劲藐,在試婚紗的時候發(fā)現(xiàn)自己被綠了八堡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡聘芜,死狀恐怖兄渺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情汰现,我是刑警寧澤挂谍,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瞎饲,受9級特大地震影響口叙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜企软,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一庐扫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仗哨,春花似錦形庭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苇倡,卻和暖如春富纸,著一層夾襖步出監(jiān)牢的瞬間囤踩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工晓褪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堵漱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓涣仿,卻偏偏與公主長得像勤庐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子好港,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容