flask加密
如果打算入這行,建議先學c,全國各大高校各專業大一先設c語言不是沒道理的,c會了,其他各種語言入手是比較簡單的。
❷ python怎麼學習
對於很多想學習Python的小夥伴來說,不知道從何開始,小蝸這里整理了一份Python全棧開發的學習路線,大家可按照以下這份大綱來進行學習:
第一階段:專業核心基礎
階段目標:
1. 熟練掌握Python的開發環境與編程核心知識
2. 熟練運用Python面向對象知識進行程序開發
3. 對Python的核心庫和組件有深入理解
4. 熟練應用sql語句進行資料庫常用操作
5. 熟練運用Linux操作系統命令及環境配置
6. 熟練使用MySQL,掌握資料庫高級操作
7. 能綜合運用所學知識完成項目
知識點:
Python編程基礎、Python面向對象、Python高級進階、MySQL資料庫、Linux操作系統。
1、Python編程基礎,語法規則,函數與參數,數據類型,模塊與包,文件IO,培養扎實的Python編程基本功,同時對Python核心對象和庫的編程有熟練的運用。
2、Python面向對象,核心對象,異常處理,多線程,網路編程,深入理解面向對象編程,異常處理機制,多線程原理,網路協議知識,並熟練運用於項目中。
3、類的原理,MetaClass,下劃線的特殊方法,遞歸,魔術方法,反射,迭代器,裝飾器,UnitTest,Mock。深入理解面向對象底層原理,掌握Python開發高級進階技術,理解單元測試技術。
4、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,PDBC,深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為Python後台開發打下堅實基礎。
5、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境配置,Docker,Shell編程Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
第二階段:PythonWEB開發
階段目標:
1. 熟練掌握Web前端開發技術,HTML,CSS,JavaScript及前端框架
2. 深入理解Web系統中的前後端交互過程與通信協議
3. 熟練運用Web前端和Django和Flask等主流框架完成Web系統開發
4. 深入理解網路協議,分布式,PDBC,AJAX,JSON等知識
5. 能夠運用所學知識開發一個MiniWeb框架,掌握框架實現原理
6. 使用Web開發框架實現貫穿項目
知識點:
Web前端編程、Web前端高級、Django開發框架、Flask開發框架、Web開發項目實戰。
1、Web頁面元素,布局,CSS樣式,盒模型,JavaScript,JQuery與Bootstrap掌握前端開發技術,掌握JQuery與BootStrap前端開發框架,完成頁面布局與美化。
2、前端開發框架Vue,JSON數據,網路通信協議,Web伺服器與前端交互熟練使用Vue框架,深入理解HTTP網路協議,熟練使用Swagger,AJAX技術實現前後端交互。
3、自定義Web開發框架,Django框架的基本使用,Model屬性及後端配置,Cookie與Session,模板Templates,ORM數據模型,Redis二級緩存,RESTful,MVC模型掌握Django框架常用API,整合前端技術,開發完整的WEB系統和框架。
4、Flask安裝配置,App對象的初始化和配置,視圖函數的路由,Request對象,Abort函數,自定義錯誤,視圖函數的返回值,Flask上下文和請求鉤子,模板,資料庫擴展包Flask-Sqlalchemy,資料庫遷移擴展包Flask-Migrate,郵件擴展包Flask-Mail。掌握Flask框架的常用API,與Django框架的異同,並能獨立開發完整的WEB系統開發。
第三階段:爬蟲與數據分析
階段目標:
1. 熟練掌握爬蟲運行原理及常見網路抓包工具使用,能夠對HTTP及HTTPS協議進行抓包分析
2. 熟練掌握各種常見的網頁結構解析庫對抓取結果進行解析和提取
3. 熟練掌握各種常見反爬機制及應對策略,能夠針對常見的反爬措施進行處理
4. 熟練使用商業爬蟲框架Scrapy編寫大型網路爬蟲進行分布式內容爬取
5. 熟練掌握數據分析相關概念及工作流程
6. 熟練掌握主流數據分析工具Numpy、Pandas和Matplotlib的使用
7. 熟練掌握數據清洗、整理、格式轉換、數據分析報告編寫
8. 能夠綜合利用爬蟲爬取豆瓣網電影評論數據並完成數據分析全流程項目實戰
知識點:
網路爬蟲開發、數據分析之Numpy、數據分析之Pandas。
1、爬蟲頁面爬取原理、爬取流程、頁面解析工具LXML,Beautifulfoup,正則表達式,代理池編寫和架構、常見反爬措施及解決方案、爬蟲框架結構、商業爬蟲框架Scrapy,基於對爬蟲爬取原理、網站數據爬取流程及網路協議的分析和了解,掌握網頁解析工具的使用,能夠靈活應對大部分網站的反爬策略,具備獨立完成爬蟲框架的編寫能力和熟練應用大型商業爬蟲框架編寫分布式爬蟲的能力。
2、Numpy中的ndarray數據結構特點、numpy所支持的數據類型、自帶的數組創建方法、算術運算符、矩陣積、自增和自減、通用函數和聚合函數、切片索引、ndarray的向量化和廣播機制,熟悉數據分析三大利器之一Numpy的常見使用,熟悉ndarray數據結構的特點和常見操作,掌握針對不同維度的ndarray數組的分片、索引、矩陣運算等操作。
3、Pandas裡面的三大數據結構,包括Dataframe、Series和Index對象的基本概念和使用,索引對象的更換及刪除索引、算術和數據對齊方法,數據清洗和數據規整、結構轉換,熟悉數據分析三大利器之一Pandas的常見使用,熟悉Pandas中三大數據對象的使用方法,能夠使用Pandas完成數據分析中最重要的數據清洗、格式轉換和數據規整工作、Pandas對文件的讀取和操作方法。
4、matplotlib三層結構體系、各種常見圖表類型折線圖、柱狀圖、堆積柱狀圖、餅圖的繪制、圖例、文本、標線的添加、可視化文件的保存,熟悉數據分析三大利器之一Matplotlib的常見使用,熟悉Matplotlib的三層結構,能夠熟練使用Matplotlib繪制各種常見的數據分析圖表。能夠綜合利用課程中所講的各種數據分析和可視化工具完成股票市場數據分析和預測、共享單車用戶群里數據分析、全球幸福指數數據分析等項目的全程實戰。
第四階段:機器學習與人工智慧
階段目標:
1. 理解機器學習相關的基本概念及系統處理流程
2. 能夠熟練應用各種常見的機器學習模型解決監督學習和非監督學習訓練和測試問題,解決回歸、分類問題
3. 熟練掌握常見的分類演算法和回歸演算法模型,如KNN、決策樹、隨機森林、K-Means等
4. 掌握卷積神經網路對圖像識別、自然語言識別問題的處理方式,熟悉深度學習框架TF裡面的張量、會話、梯度優化模型等
5. 掌握深度學習卷積神經網路運行機制,能夠自定義卷積層、池化層、FC層完成圖像識別、手寫字體識別、驗證碼識別等常規深度學習實戰項目
知識點:
1、機器學習常見演算法、sklearn數據集的使用、字典特徵抽取、文本特徵抽取、歸一化、標准化、數據主成分分析PCA、KNN演算法、決策樹模型、隨機森林、線性回歸及邏輯回歸模型和演算法。熟悉機器學習相關基礎概念,熟練掌握機器學習基本工作流程,熟悉特徵工程、能夠使用各種常見機器學習演算法模型解決分類、回歸、聚類等問題。
2、Tensorflow相關的基本概念,TF數據流圖、會話、張量、tensorboard可視化、張量修改、TF文件讀取、tensorflow playround使用、神經網路結構、卷積計算、激活函數計算、池化層設計,掌握機器學習和深度學習之前的區別和練習,熟練掌握深度學習基本工作流程,熟練掌握神經網路的結構層次及特點,掌握張量、圖結構、OP對象等的使用,熟悉輸入層、卷積層、池化層和全連接層的設計,完成驗證碼識別、圖像識別、手寫輸入識別等常見深度學習項目全程實戰。
❸ flask為什麼要注冊藍圖才能用
一個簡單的用戶注冊和登錄的頁面,就兩個部分。
涉及到資料庫,存儲用戶數據(注冊),讀出用戶數據(登錄驗證)。搞清楚如何用python連接和操作資料庫即可,還有了解sql資料庫語句,sqlite和mysql差不多的,看幾眼多試幾下就了解了。
網站程序,前端如何發送表單(別告訴這你也不清楚?)後端獲取用戶發送的請求,和資料庫中數據驗證是否能夠登錄,然後登錄後如何保存用戶登錄信息,就是使用的cookie,不過在flask中是session(其實session也是cookie,flask把它封裝了下,成了加密的cookie)
總之如果你認真跟著官方的教程走過一遍。只是完成用戶登錄和注冊的功能都不難的。雖然這些知識點都不爛,但是覆蓋范圍還比較廣泛。資料庫,前端的html,後端的程序框架,你對其中一項不太了解都會讓你有種無法下手的感覺。
好吧。丟一段驗證登錄代碼上來,因為flask的路由是通過綁定一個個函數來實現的,如果你要在給每個路由都添加一段驗證登錄的代碼還是蠻麻煩的,不過通過裝飾器這個功能實現起來還是蠻方便的。
。
❹ python庫Django,Flask各有什麼用途
Flask適合做app後台或基於json通信的ajax應用,是輕量級框架,我用到的一個技術方案是pypy+ Flask +peewee + uWSGI + nginx + ubuntu server,速度快,開發效率高,主要是通過伺服器返回json數據(json可以用壓縮方式)走http和各個app交互,你也可以用Flask+WebSocket實現類似在線游戲的長連接,數據格式建議用json,如果有性能要求可以用Protocol Buffers協議。這樣基於json api(RESTful太底層了,一般用json文本就可以了)的開發方式,一套後台程序,可以用於ajax網頁,android,ios,pc,tv等多套app,最大程度滿足了軟體復用思想,否則一個app開發一個後台或變種後台,代價非常高,也不利於安全和性能。微服務就是這種思想擴展,但主要是針對企業應用,web2.0發展以來,一般應用用http api生成json數據交互就好,mvc模式不適合在http api上用,mvc模式是web1.0時代沒有ajax,json無法分離html的妥協解決方案。http調用類似函數一樣,有入口參數,返回json給調用者,當然可以在返回時加密、壓縮,從而實現低耦合高內聚。另外對於http api需要防止注入攻擊,加強許可權控制,限制調用次數。
Django屬於重量級的,很多東西是現存的,只要熟悉就可以用,但缺點是不如Flask定製靈活,適合用於普通的web應用。
❺ 如何理解flask中的藍本
session 是可以跨 request 使用的,session 的數據是經過加密後存儲在 cookie 里的,用戶每次 request 都會把這些 cookie 信息發回來,從而實現跨 request 使用。
g 是面向單個 request 的,一個 request 處理完,g 里的東西就沒啦。(注意,這里說的 request 不是指 request context,從 0.10 版本開始,g 已經是面向 app context 了。這里寫面向單個 request 是為了幫助提問者理解問題中提到的區別,僅考慮在 web 下的場景。)
❻ python web button點擊響應問題
第一階段:Python開發基礎
課程內容:
計算機硬體、操作系統原理、Python基礎編程語法、數據類型、字元編碼、文件操作、函數、裝飾器、迭代器、內置方法、模塊的跨目錄導入、常用標准庫學習,b加密
第二階段 Python高級編程/資料庫開發
課程內容:
面向對對象開發、TCP/IP協議、Socket網路編絡編程、簡單遠程命令執行客戶端開發、C\S架構FTP伺服器開發、線程、進程、隊列、IO多路模型、Mysql數資料庫開發、視圖、觸發 器、事務、分組、聚合、分頁、連接池、學員管理系統開發……
第三階段:前端開發
課程內容:
Html、CSS、JavaScript開發、Jquery、bootstrap開發、Vue架構剖析、mvvm開發思想、Vue數據綁定與計算屬性、條件渲染 類與樣式綁定、表單控制項綁定、webpack、vue實戰開發……
第四階段:WEB框架開發
課程內容:
Django框架、BBS+Blog實戰項目開發、緩存和隊列中間件、Memcached、redis緩存、RabbitMQ隊列學習、Celery分布式任務隊列學習、Flask框架、Tornado框架、Restful API……
第五階段:爬蟲開發
課程內容:
主流模塊學習、requests登陸實現、抽屜、github、知乎、博客園、爬取拉鉤職位信息、開發Web版微信、高性能IO相關模塊、驗證碼圖像識別、Scrapy框架與源碼剖析、分布式爬蟲……
第六階段:全棧項目開發
課程內容:
開發流程講解、git、github協作開發工具、任務管理系統、介面單元測試、敏捷開發與持續集成介紹、django + uwsgi + nginx生產環境部署學習、互聯網企業大型項目架構圖深度講解、CRM客戶關系管理系統開發、在線教育平台實戰開發……
❼ Python課程內容都學習什麼啊
賀聖軍Python輕松入門到項目實戰(經典完整版)(超清視頻)網路網盤
鏈接: https://pan..com/s/1C9k1o65FuQKNe68L3xEx3w
若資源有問題歡迎追問~
❽ 使用python發布介面,如何提醒用戶升級
簡單說下介面測試,現在常用的2種介面就是http api和rpc協議的介面,今天主要說:http api介面是走http協議通過路徑來區分調用的方法,請求報文格式都是key-value形式,返回報文一般是json串;
介面協議:http、webservice、rpc等。
請求方式:get、post方式
請求參數格式:
a. get請求都是通過url?param=xxx¶m1=xxx
b. post請求的請求參數常用類型有:application/json、application/x-www-form-urlencoded、multipart/form-data、text/html等。
還需要知道介面的url、參數類型、返回結果的數據格式、了解介面是否有header、cookie等信息。
介面的實現:請求方式-get,介面的寫法:
import flaskfrom flask import requestfrom flask import jsonifyimport toolsimport OP_dbimport settings'''flask: web框架,可以通過flask提供的裝飾器@server.route()將普通函數轉換為服務登錄介面,需要傳url、username、passwd'''#創建一個服務,把當前這個python文件當做一個服務server = flask.Flask(__name__)#server.config['JSON_AS_ASCII'] = False # @server.route()可以將普通函數轉變為服務 登錄介面的路徑、請求方式@server.route('/login', methods=['get'])def login(): # 獲取通過url請求傳參的數據 username = request.values.get('name') # 獲取url請求傳的密碼,明文 pwd = request.values.get('pwd') # 判斷用戶名、密碼都不為空,如果不傳用戶名、密碼則username和pwd為None if username and pwd: # 獲取加密後的密碼 password = tools.md5_pwd(pwd) #執行sql,如果查詢的username和password不為空,說明資料庫存在admin的賬號 sql = 'select name,password from test where name= "%s" and password= "%s";' %(username, password) # 從數據查詢結果後,res返回是元組 res = OP_db.getconn( host=settings.mysql_info['host'], user=settings.mysql_info['user'], passwd=settings.mysql_info['pwd'], db=settings.mysql_info['db'], port=settings.mysql_info['port'], sql=sql ) if res: #res的結果不為空,說明找到了username=admin的用戶,且password為加密前的123456 resu = {'code': 200, 'message': '登錄成功'} return jsonify(resu) #將字典轉換為json串, json是字元串 else: resu = {'code': -1, 'message': '賬號/密碼錯誤'} return jsonify(resu) else: res = {'code': 999, 'message': '必填參數未填寫'} return jsonify(res) if __name__ == '__main__': server.run(debug=True, port=8888, host=0.0.0.0) #指定埠、host,0.0.0.0代表不管幾個網卡,任何ip都可以訪問
md5加密、資料庫mysql的操作詳見我的其他博客~~~~~
get訪問介面:
項目啟動後,介面的地址是:http://127.0.0.1:5000/,默認埠是5000。
打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx?name=xxx&pwd=123456,後面跟上介面的地址login,參數跟url直接使用?相連,每個請求參數直接使用&相連。請求成功,則返回{'code': 200, 'message': '登錄成功'}。
請求方式-post,介面的寫法:
import flaskfrom flask import jsonifyfrom flask import requestfrom conf import opMysqlfrom conf import md5_create'''注冊介面:post請求,請求參數入參類型json{ "username":"aaa", "pwd":"123456", "c_pwd":"123456"}'''server = flask.Flask(__name__)@server.route('/register', methods=['get', 'post'])def registerPost(): #判斷介面的請求方式是GET還是POST if request.method == 'POST': # 獲取請求參數是json格式,返回結果是字典 params = request.json username = params.get('username') pwd = params.get('pwd') confirmpwd = params.get('confirmpwd') if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認密碼都不為空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查詢注冊的用戶是否存在資料庫,如果存在,則username不為空,否則username為空 res_mysql = opMysql.op_select(select_sql) if res_mysql: return jsonify({"code": 999, "mesg": "用戶已注冊"}) else: if pwd == confirmpwd: # 判斷pwd和confirmpwd一致 new_pwd = md5_create.md5_test(pwd) # 加密後的密碼 insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd) opMysql.op_insert(insert_sql) return jsonify({"code": 200, "msg": "注冊成功"}) else: return jsonify({"code":998, "msg":"密碼不一樣"}) else: return jsonify({"code": 504, "msg": "必填項不能為空"}) else: return jsonify({"code": 201, "msg": "請求方式不正確"}) if __name__ == '__main__': #port可以指定埠,默認埠是5000 #host寫成0.0.0.0的話,其他人可以訪問,代表監聽多塊網卡上面,默認是127.0.0.1 server.run(debug=True, port=8899, host='0.0.0.0')
post訪問介面:
項目啟動後,介面的地址是:http://127.0.0.1:5000/,默認埠是5000。
打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx,後面跟上介面的地址register,參數使用postman或jmeter進行請求,參數類型是json。請求成功,則返回{'code': 200, 'message': '登錄成功'}。
請求方式-get、post都可以訪問,寫法如下:import flaskfrom flask import jsonifyfrom flask import requestfrom conf import opMysqlfrom conf import md5_create'''注冊介面:post請求,請求參數入參類型json{ "username":"aaa", "pwd":"123456", "c_pwd":"123456"}'''server = flask.Flask(__name__)@server.route('/register', methods=['get', 'post'])def registerPost(): #post請求獲取請求的參數,返回結果類型是str username = request.values.get('username') pwd = request.values.get('pwd') confirmpwd = request.values.get('confirmpwd') if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認密碼都不為空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查詢注冊的用戶是否存在資料庫,如果存在,則username不為空,否則username為空 res_mysql = opMysql.op_select(select_sql) if res_mysql: return jsonify({"code": 999, "mesg": "用戶已注冊"}) else: if pwd == confirmpwd: # 判斷pwd和confirmpwd一致 new_pwd = md5_create.md5_test(pwd) # 加密後的密碼 insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd) opMysql.op_insert(insert_sql) return jsonify({"code": 200, "msg": "注冊成功"}) else: return jsonify({"code": 998, "msg": "密碼不一樣"}) else: return jsonify({"code": 504, "msg": "必填項不能為空"}) if __name__ == '__main__': #port可以指定埠,默認埠是5000 #host默認是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監聽多塊網卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
❾ 什麼是mpeg4 mpeg1 av1格式
MPEG的全稱是「Motion Picture Expert Group」(移動影像專家組),組建於1988年,目的是為傳送音頻和視頻制定標准。我們目前習慣的MP3,並不是MPEG-3,而是MPEG 1 layer 3,屬於MPEG 1中的音頻部分。MPEG 1的像質等同於VHS,存儲媒體為CD-ROM,圖像尺寸320×240,音質等同於CD,比特率為1.5Mbps。MPEG-1:廣泛的應用在 VCD 的製作和一些視頻片段下載的網路應用上面,可以說99%的VCD都是用 MPEG1格式壓縮的。我們目前習慣的MP3,並不是MPEG-3,而是MPEG 1 layer 3,屬於MPEG 1中的音頻部分。MPEG 1的像質等同於VHS,存儲媒體為CD-ROM,圖像尺寸320×240,音質等同於CD,比特率為1.5Mbps。 該標准分三個部分:系統:控制將視頻、音頻比特流合為統一的比特流。視頻:基於H.261和JPEG。 音頻:基於MUSICAM技術。 MPEG-2:應用在 DVD 的製作(壓縮)方面,同時在一些 HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當的應用面。MPEG-2與MPEG-1的區別: 除了對幀(frame)進行搜索,還對場(field)進行搜索。 MB色度格式還可為4:2:2、4:4:4。 幀尺寸最大可為16383×16383可分級(Scalable):時域(Temporal)等等…… 非線性MB量化因子。 A bunch of minor fixes MPEG-3:原本針對於HDTV(1920×1080),後來被MPEG-2代替。 MPEG-4:針對多媒體應用的圖像編碼標准。 MPEG-4是一種新的壓縮演算法,使用這種演算法的 ASF 格式可以把一部 120 分鍾長的電影(未視頻文件)壓縮到 300M 左右的視頻流,可供在網上觀看。其它的 DIVX 格式也可以壓縮到 600M 左右,但其圖象質量比 ASF 要好很多。MPEG-7:基於內容表示的標准,應用於多媒體信息的搜索,過濾,組織和處理。在以上背景知識基礎上,拋開這些專用術語,對我們用戶來說,一個最直觀的描述:MPEG4的影像壓縮,可以提供給我們接近DVD的質量,文件又更小的選擇,通過對MPEG格式0各階段的了解,我們知道,MPEG-1代表了我們熟悉的VCD,MPEG-2代表了我們熟悉的DVD,MPEG-4則在比DVD文件體積更小的情況下,提供接近DVD品質的目標。既然我們知道了MPEG-4是一種新的壓縮演算法,使用這種演算法的ASF格式可以把一部120分鍾長的電影(未視頻文件)壓縮到300M左右的視頻流,可供在網上觀看。那麼它究竟是怎樣的編碼格式呢?運動圖像專家組,英文簡稱MPEG(Moving Picture Experts Group)隸屬於ISO/IEC的一個專家工作組,1992年制定出MPEG0-1標准,隨後的1994年,制定出MPEG-2標准,隨著研究工作的深入發展,ISO又公布了「超低比特率活動圖像和語音壓縮標准」,排序MPEG-4,1998年10月批准第一版,1994年4月又公布了第二版及其校驗模型(VM),MPEG-4正式編號是ISO/IEC國際標准14496,它是一種新型的多媒體標准,它與前標准一個重要區別就在於它是一個基於對象的視編碼壓縮標准,它所定義的碼率控制的目標就是獲得在給定碼率下的最優質量,它為互聯網上傳輸高質量的多媒體視頻提供了很好的技術平台。 1998年微軟開發了第一個在PC上使用的MPEG-4編碼器,它包括MS MPEG4V1、MS MPEG4V2、MS MPEG4V3的系列編碼內碼,其中V1和V2用來製作AVI文件,一直到現在它都是作為Windows的默認組件,不過V1和V2的編碼質量不是很好,一直到MSMPEG4V3才開始有好轉,畫質有了顯著的進步,但是不知微軟出何居心,卻將這個MSMPEGV3的視頻編碼內核封閉,僅僅使其應用於Windows Media流媒體技術上,也就是我們熟悉的ASF流媒體文件中,ASF文件雖然有一些優勢,但是由於過分的封閉不能被編輯,末得到廣泛的應用,這便惹怒了那些個不怕天不怕地的視頻黑客和致力於鑽研視頻編碼的高手,後來,這些小組不僅破解了微軟的視頻編碼,而且經過他們的修改,一種新的視頻編碼誕生了:那就是廣為流傳的MPEG編碼器-DivX3.11。 DivXNetworks成立初衷就是擺脫微軟的技術封閉,因而發起一個完全開放源碼的項目,名為「Projet Mayo」,目標是開發一套全新的、開放源碼的MPEG4編碼軟體,由於它完全符合ISOMPEG標准,又是完全開放源代碼,OpenDivXCODEC吸引了很多軟體,視頻高手參與,就在DivX最輝煌的時期,DXN公司突然封閉了DivX的源代碼,並在Encore2的基礎上發布了自有產品DivX4。後來DXN公司在OpenDivX版本基礎上,再次開發出一種新的MPEG-4編碼-XviD,名字的順序和DviX剛好相反-Xvid。 從技術上來說,Xvid已經基本上與DXN公司的最新版本DivX5接近,或者還有所超越,它可以在保持DivX5畫質基礎上,大大提高壓縮時間,被認為是目前最快的MPEG4編碼。除此之外,Xvid還吸收了前車之鑒,依照GPL發布,也就是說,誰要是想做成產品而不開放源碼是非法的。其實,我們平常見到的影像格式如微軟的ASF、WMV,還有AVI(不是早期的AVI,這種你用微軟的WMP6.0以前可以直接播放,不需要重新下載解碼器)—主要採用divX、Xvid編解碼,而文件名還是用AVI。這些實際都屬於MPEG-4的范疇。從播放角度,目前網路上可以獲取的MPEG-4影音文件,如果你要播放的話,需要先安裝其相應的解碼器——個人角度我一直在用微軟的WMP,通過載入解碼器,它可以對付基本所有的MPEG-4文件了。時下網路中有很多視頻都是MPEG-4格式,可是,其中有些文件卻非常的模糊,有人不禁會問,MPEG-4質量為什麼這么差?怎麼連VCD(MPEG-1)的效果都達不到?其實問題不在MPEG-4,而在不法商販為了牟取暴利,在製作MPEG-4時片面追求壓縮率而有意降低了它的品質。理論上MPEG-4的效果應該與DVD差不多,而文件卻小很多......其實,你自己也可以動手製作MPEG4文件。 DIY步驟一:復制DVD文件 DVD影片採用的是vob格式文件來存放的,而且這些文件大都是經過加密處理的,所以我們需要做的第一步就是將DVD光碟上的文件復制到硬碟中,然後才能進行其它的處理工作。為了復制DVD碟片上的內容,我們需要一個名為Decss的工具,它的使用非常簡單。如圖1所示,先在左邊的「config」下拉選單中選擇DVD盤符,然後把DVD碟片放入光碟機中,右邊的區域中將會顯示出當前光碟根目錄下的文件。這時可以通過點擊「select folder」進入DVD光碟的其他目錄,然後在右邊的文件列表中選擇需要拷貝的文件。最後再按下「transfer」按鈕來將文件復制到自己的硬碟中。需要指出的是,由於DVD容量很大,所以在復制的時候會有一個比較長的過程,在筆者使用的pⅡ400、64m內存、ibm 10g(5400轉)硬碟的機器上,復制一段大小為480m的文件,花費了將近35分鍾的時間,如果你的機器比我使用的還要遜色一點的話,可以乘這段時間好好休息一下,順便吃點東西補充一下,因為我們的路還長著呢。 DIY步驟二:文件格式轉換此時在硬碟中的文件是vob格式的,離MPEG4還有十萬八千里,現在就要將文件格式轉換為普通播放器可以識別的通用格式。目前有好幾種工具可以實現這種轉換目的,但是在此向大家介紹一個筆者認為是最好用的轉換工具---flask mpeg-encoder。利用它能夠把vob格式的文件轉換為avi(MPEG4格式)或者是mpeg-1(vcd格式)的文件。在運行flask mpeg-encoder之後,會先看見圖2所示的界面,此時點擊「file/open」並選中剛才復制下來的vob文件,在開始轉換之前還要對其進行一番設置。在「options」目錄下,有一個「global project option」選項,點擊之後會彈出設置窗口。在這個窗口中有5個標簽用於設置,在此將影響到最終生成的影像文件質量的兩個設置內容向大家介紹一下。 在上圖「video」選項中的「frame size」是最後生成影像的播放窗口大小,你可以根據自己的需要來調整,但是提醒大家注意,這兩個值一定要是16的整數倍,不然在轉換過程中會出錯。下部的「time base」是根據電視機的制式來轉換文件,選擇29.97、23.976或者是24,就可以得到ntsc制式的文件;對於pal制式來說,則需要25。右邊的「idct options」提供了三種轉換法則,它們分別為mmx、無mmx和ieee-1180,其中mmx採用了浮點運算,因此是最快的一種轉換演算法;而ieee-1180則保證了轉換時的影像損傷最小,所以是最慢的演算法。如果你的機器夠快,那麼ieee-1180是最佳的選擇,不然還是選用mmx作為折中的選項。「post processing」中左邊的「resizing quality options」用來設定轉換後得到文件的視覺質量,從上到下的四個選項依次能夠使視覺效果得到改觀,但是轉換所需的時間也在成正比例增加,建議大家採用「bilinear filtering」來達到速度和質量的平衡點。右邊的區域可以給影像添加自己設計的logo,在此僅提及一下,有興趣的話不妨自己試試。
對上述屬性設置完成之後,直接在「options/select output format」命令下選擇「avi」轉換格式,然後再執行「run/start convertion」即可開始轉換步驟了。上面兩步解決了視頻文件的轉換,但是並沒有獲得音頻文件,所以下面就想辦法得到DVD碟片上的音頻文件。由於DVD光碟的特殊性,我們採取的也是先提取音頻文件再將其轉換為可以合成的wav文件方法。 DIY步驟三:獲取音頻文件目前能夠從DVD光碟中截取音頻文件的軟體好像只有vob-snoopy了,它可以從vob文件里把聲音取出來並保存為ac3格式。運行vob-snoopy之後,先通過「file/open」命令將DVD光碟上相關路徑下的vob文件添加進來,然後將會看見圖4所示的界面。在窗口中顯示了每一條音頻文件的信息,你可以用「details」按鈕來獲得詳細信息,或者是「hex」來查看相關的16進制信息。但是最簡單的截取音頻文件的方法就是點擊「extract」按鈕,然後在彈出的窗口中選擇「audio to *.ac3」文件,並按下「ok」按鈕即可。在得到了ac3格式的音頻文件之後,還要用到ac3decode這個小工具將音頻文件轉換為windows中媒體播放器可以直接播放的wav文件。這是一個運行在dos模式下的軟體,其命令格式為「ac3dec args」,其中「input file」是上面獲得的ac3文件,並在後面加上一個wav文件的存放路徑和名稱即可,至於其它具體的附加參數可以通過「ac3dec -helpmore」命令具體查看,在此也就不再詳述了。上面三步完成之後,可以說是已經完成了大部分工作,下面最後一步就是將得到的兩個文件合並起來就能夠得到完整的MPEG4影像文件了。DIY步驟四:生成MPEG4文件採用一個名叫virtualb的工具來完成最後一步,它是一個功能非常強大的影像編輯工具,能夠實現avi、mpeg等影像的編輯和截取,也可以將影像文件中的視頻文件和音頻文件分離開,當然也能夠把分開的視頻和音頻文件合二為一。下面就簡單介紹一下利用virtualb來合並文件的操作步驟。運行virtualb之後,先通過「file/open video file」添加已經得到的avi文件,這時將會看見圖6所示的界面。利用下部的播放按鈕,可以先預覽一下添加的影像文件,然後在選單欄的「audio」命令下選擇「wav」,會有一個窗口彈出,此時將轉換得到的wav文件添加進去。最後再執行「file/save avi」就可以把這兩個單獨的文件合並為一體,得到MPEG4文件。 但是,在使用virtualb生成MPEG4文件的時候,還有一些參數需要設置,比如在「options」選單中,有「performance」和「preference」兩個選項,它們都是用來設定生成文件的屬性。其中前者可以設置輸出影像的色彩位數、合並工作的優先順序別、cpu的工作模式以及生成文件的大小限制等等有關視頻方面的內容,後者主要是針對合並音頻文件時的緩沖、生成avi文件時的緩沖、數據流操作等涉及到音頻方面的內容(見圖7)。這些設置都很簡單,只要用滑鼠點擊復選框進行選取或者是拖動滑動條即可,在此也就不再詳述了,只是提醒大家注意一下,正確的設置不僅能夠得到更佳的視聽效果,而且還可以加快生成文件的速度。
❿ flask 的 g 和session 的區別怎樣理解
最近一直在研究Flask,由於gfirefly中提供的Http介面使用了Flask,以前都是寫一些游戲中簡單的操作,最近涉及到Flask的方面比較多,所以就認真研究了下。對Flask的request context和app context略有心得,所以和小夥伴們分享一下Flask的request原理。
在我們視圖中要使用request時只需要from flask import request就可以了
很好奇在多線程的環境下,是如何保證request沒有混亂的
在flask.globals.py中
[python] view plain 在CODE上查看代碼片派生到我的代碼片
def _lookup_req_object(name):
top = _request_ctx_stack.top
if top is None:
raise RuntimeError('working outside of request context')
return getattr(top, name)
_request_ctx_stack = LocalStack()
request = LocalProxy(partial(_lookup_req_object, 'request'))
session = LocalProxy(partial(_lookup_req_object, 'session'))
其實可以看到不管request還是session最後都是通過getattr(top, name)獲取的,也就是說肯定有一個上下文
對象同時保持request和session。我們只要一處導入request,在任何視圖函數中都可以使用request,
關鍵是每次的都是不同的request對象,說明獲取request對象肯定是一個動態的操作,不然肯定都是相同的request。這里的魔法就是_lookup_req_object函數和LocalProxy組合完成的。
LocalProxy是werkzeug.local.py中定義的一個代理對象,它的作用就是將所有的請求都發給內部的_local對象
[python] view plain 在CODE上查看代碼片派生到我的代碼片
class LocalProxy(object):
def __init__(self, local www.hbbz08.com , name=None):
#LocalProxy的代碼被我給簡化了,這里的local不一定就是local.py中定義的線程局部對象,也可以是任何可調用對象
#在我們的request中傳遞的就是_lookup_req_object函數
object.__setattr__(self, '_LocalProxy__local', local)
object.__setattr__(self, '__name__', name)
def _get_current_object(self):
#很明顯,_lookup_req_object函數沒有__release_local__
if not hasattr(self.__local, '__release_local__'):
return self.__local()
try:
return getattr(self.__local, self.__name__)
except AttributeError:
raise RuntimeError('no object bound to %s' % self.__name__)
def __getattr__(self, name):
return getattr(self._get_current_object(), name)