1、django+python27+mysql的生產(chǎn)環(huán)境,想換成python3,請問需要哪些注意事項?生產(chǎn)環(huán)境數(shù)據(jù)不想被破壞,所以不敢輕易下手,希望大神指點一下?
關(guān)于python升級:
可以使用Python3自帶工具2to3,將python2的代碼轉(zhuǎn)換為python3。少部分代碼仍需手工轉(zhuǎn)換。
升級python版本后,第三方包的版本需要升級。有的第三方包不支持python3。這個時候可以嘗試使用2to3工具對第三包的python源代碼進行轉(zhuǎn)換,然后使用。這樣存在一定風(fēng)險。無法轉(zhuǎn)換的,需要尋找替代包,應(yīng)用服務(wù)器上對應(yīng)的代碼需要修改。
關(guān)于django升級:
django1.5開始支持python3。同時django1.11是支持python2的最后的版本。如果使用的django版本大于等于1.5,則django版本可以不升級。如果django版本低于1.5,則需要升級django版本。升級django版本后,新版本不兼容的老的API都需要修改。這個工作量比較大。
升級django版本后,為django服務(wù)的第三方包需要對應(yīng)升級。建議django不要立即使用最新版本,以免第三方包還不支持最新的django版本。
關(guān)于mysql:
mysqldb不支持python3,需要使用mysqlclient做數(shù)據(jù)庫API驅(qū)動。
django2.0只支持myslq5.5或者更高版本
一般性的版本升級注意事項。
代碼和數(shù)據(jù)做好備份
python和django升級后,上線前需要充分測試。
2、剛學(xué)習(xí)django的nginx部署,一直不清楚處理高并發(fā)的原理,大神可以解釋下么?
我簡單說一下我的理解。
django WSGI是單線程的,就是說一個請求處理完了才能響應(yīng)另一個請求。
uWSGI(C語言書寫)+Django相比與單獨使用Django,通過多進程,發(fā)揮多核的優(yōu)勢,支持的并發(fā)量更高。
the web client <-> the web server <-> the socket <-> uwsgi <-> Django
uwsgi服務(wù)器運行在django一側(cè)。
uWSGI(C語言書寫)+Django相比與單獨使用Django,使用多進程,發(fā)揮多核的優(yōu)勢,支持的并發(fā)量更高。uWSGI中有master和worker進程。master進程根據(jù)配置創(chuàng)建相應(yīng)數(shù)目的worker進程。一個worker進程被創(chuàng)建后,它會運行一個python解釋器實例,然后在worker進程被銷毀前一直使用。master將收到的http請求分配給worker處理。worker進程調(diào)用python腳本處理http請求。一個worker進程反復(fù)用于處理很多個HTTP請求。woker進程數(shù)應(yīng)該大于CPU內(nèi)核數(shù)。然后根據(jù)CPU利用率增加進程數(shù)目。
3、我現(xiàn)在系統(tǒng)需要一個功能,當(dāng)一個任務(wù)到達某個狀態(tài)時,如果24小時沒有任何人操作,則自動切換到另一個狀態(tài),對每個用戶是有不同的任務(wù)的,有點想?百度?外賣下單等待商家接單的那種,有什么可以方便django整合一起的框架嗎?django-celery如何?
簡單說一下我的考慮,供你參考。
用戶下單后,用戶訂單信息寫入數(shù)據(jù)庫。商家接單后,修改數(shù)據(jù)庫中用戶訂單狀態(tài)。
關(guān)于定時器:考慮使用django-celery創(chuàng)建一個線程做異步處理,24小時后檢查數(shù)據(jù)庫中用戶訂單狀態(tài)。如果仍然沒有商家接單,則修改訂單狀態(tài)。但是這樣可能線程太多,資源消耗太大??梢允褂胐jango-celery設(shè)置循環(huán)任務(wù),比如每隔5分鐘查詢出數(shù)據(jù)庫中已經(jīng)超過24小時、但是仍然沒有商家接單的訂單,修改這些訂單的狀態(tài)。
4、要怎么樣運行Django里的程序???出于比賽需要,要解釋一個 Django框架里的軟件,本人學(xué)java,沒接觸過 Python的框架?求入口在哪兒?怎么運行???
這個操作我的教程“Python Django帶你構(gòu)建Web應(yīng)用”里有。
進入django項目根目錄。python manage.py runserver運行內(nèi)置的Web服務(wù)器。缺省提供服務(wù)的IP地址是127.0.0.1,端口是8000。
如果希望對外提供服務(wù),可以修改為真實的IP地址,例如想要使用1.1.1.1:8080對外提供服務(wù)。則在settings.py修改ALLOWED_HOSTS的內(nèi)容為ALLOWED_HOSTS = [‘1.1.1.1’,]。 d:\django\web> python manage.py runserver 1.1.1.1:8000運行內(nèi)置的Web服務(wù)器。
5、想跟你請教個問題:能用django做旅游調(diào)查網(wǎng)站嗎,通過調(diào)查班級同學(xué)的旅游意向,將信息存入數(shù)據(jù)庫,然后進行簡單的分析,得出最佳旅游地點,這種想法可行嗎?
第一部分收集和存儲信息的需求和django相關(guān)。這是一個簡單的Web應(yīng)用。使用表單獲取同學(xué)們的旅游意向。因為數(shù)據(jù)量小,所以可以直接將數(shù)據(jù)存入SQLite數(shù)據(jù)庫中。
第二部分數(shù)據(jù)分析和結(jié)果展示,不一定需要依賴于django。根據(jù)需要從數(shù)據(jù)庫中提取信息進行分析。如果分析復(fù)雜,可以使用numpy、pandas進行分析,使用matploitlib展示分析結(jié)果。
6、本來是準(zhǔn)備開發(fā)一個web應(yīng)用,主要是網(wǎng)站和客戶端(pda)訪問,現(xiàn)在網(wǎng)站使用django很方便就完成了,那在客戶端(pda)上面的想法是用webservice,也不知道可以直接使用django實現(xiàn)。能不能不用webservice,直接django搞定,希望能得到解決方案并普及一下知識?
可以使用Django REST framework來實現(xiàn)RESTful web service。
7、如何最高效的利用django進行快速開發(fā)?或者可以說django那些部分,可以幫助實現(xiàn)快速開發(fā)?
我覺得django開發(fā)快的原因在于:
首先是python,作為動態(tài)類型語言,使用靈活,開發(fā)速度快。
其次,和另外一個常用的python web框架flask對比。django提供的功能更全面。django是重量級框架。flask是輕量級框架,很多基本的功能都需要自己實現(xiàn)或者使用第三方組件,但是使用靈活。
django優(yōu)點:內(nèi)置功能完善、強大(比如表單、認證、權(quán)限控制、文件上傳、測試、國際化、分頁、序列化、會話、數(shù)據(jù)驗證、異常處理)使用方便,很多功能都不需要程序員自己實現(xiàn)了,強大的ORM機制,強大的admin站點,url pattern靈活易用,APP可插拔,錯誤提示信息非常詳細,官方文檔完善。
django缺點:封裝層次多,修改困難。想用喜歡的第三方組件來代替內(nèi)置組件比較困難。django為了將表現(xiàn)和邏輯分離,所以DTL功能比較弱。
根據(jù)需求選擇框架,快速開發(fā)選擇django,深層次定制,選擇flask。
8、我用終端創(chuàng)建django項目時 提示 django-admin: command not found ,但是運行Python 導(dǎo)入django又可以,這是哪里出錯了 而且之前有創(chuàng)建成功過,能幫忙解答一下嗎?
比如python安裝目錄是D:\Python36\,則安裝django后,django-admin.exe在D:\Python36\Scripts\中。需要將D:\Python36\Scripts\;添加到系統(tǒng)變量Path中。
9、想問一下,一個分組查詢,現(xiàn)在有一個"性別"字段,我想統(tǒng)計其中男女生各有多少人,想用分組查詢的辦法。但是找不到示例代碼,求老師賜教?
類似查詢每個用戶寫了多少篇blog
from django.db.models import Count
numbers = Blog.objects.values('username').annotate(blog_count=Count('username')).order_by()
等效于SQL語句:select username, count(*) from Blog group by username
得到的QuerySets numbers的值是:
最后添加order_by()是因為model里面定義了class meta: ordering。
10、Django中的通用視圖是個難點嗎?今天搞了一天這個通用視圖,我是一點沒懂。網(wǎng)上也查不到詳細的資料,求老師簡單介紹一下~
django視圖最常做的事情是根據(jù)url中傳入的參數(shù),從數(shù)據(jù)中獲取數(shù)據(jù)。加載模板,然后返回渲染后的模板。django提供通用視圖來實現(xiàn)這一常見流程。從而減少視圖的代碼量。
URLconf中參數(shù)的名字可能需要修改,比如DetailView通用視圖要求使用參數(shù)"pk"來表示主鍵。
在繼承了通用視圖類的視圖類中,只需要指定model和template_name,就可以完成基本的流程。
另外還要注意context變量要和template中對應(yīng)。
django2.0的手冊 2.6.2 Use generic views: Less code is better給出了一個基本的例子,你可以試一下這個例子。
11、我原來做一個項目:因為表沒有關(guān)聯(lián),所以用的是非關(guān)系型數(shù)據(jù)庫mongodb,項目開發(fā)環(huán)境用的是python+django,部署在ubuntu上。當(dāng)時用了pymongo做python和mongodb的連接,用mongoengine做了django與mongodb的連接。
現(xiàn)在來了新的需求,表之間有關(guān)聯(lián),因此我準(zhǔn)備添加一個mysql數(shù)據(jù)庫。
請問老師,django展示網(wǎng)頁的時候,能夠同時展示mongodb中表的內(nèi)容和mysql中表的內(nèi)容嗎?settings.py中應(yīng)該如何配置數(shù)據(jù)庫呢?
可以在同一個網(wǎng)頁中同時顯示Mongodb和mysql中的數(shù)據(jù)。Django中只需要把需要顯示的內(nèi)容通過context傳遞給template即可。不管context的內(nèi)容來自哪種數(shù)據(jù)庫。
在setting.py DATABASES中添加連接mysql所需的參數(shù),例如:
'db2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '10.0.0.1',
'PORT': '3306',
}
可以設(shè)置數(shù)據(jù)庫和app的映射關(guān)系
DATABASE_APPS_MAPPING = {
'app1': 'db1',
'app2': 'db2',
}
也可以在查詢或者修改數(shù)據(jù)庫內(nèi)容時,使用函數(shù)using()或者參數(shù)using來指定需要使用哪個數(shù)據(jù)庫。
12、作為一名小白,我想問大神:都說python django學(xué)起來相對來說比較簡單,從入門到學(xué)會大致需要多久的時間?。恳簿褪菍W(xué)習(xí)周期大概有多長?需要哪些基礎(chǔ)呢?
如果了解MVC框架和http協(xié)議,又懂python,那學(xué)django比較快。否則的話時間就久一些。
13、我用django自動創(chuàng)建了后臺需要的表,其中一張表A用來存需要展示的新聞內(nèi)容,之前新聞內(nèi)容是存在另外一張表B中(mysql的數(shù)據(jù)庫編碼之前是latin,后來改成utf8,A表B表全部都是utf8編碼),我把B表內(nèi)容導(dǎo)入A表,英文部分是正常,但是中文部分全部變成了問號,求解?
可能問題出在connection連接層上。需要將連接層的編碼方式也修改為UTF-8
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
