如何用python開發移動App(android、iOS)後台?需要掌握哪些技術?

本人會移動開發,略知後台開發,不過一般公司都採用java 或者 c開發後台,我想使用python開發移動後台,返回json數據給移動app,我需要怎麼做?

1、如果使用python語言,需要學習哪些知識?

2、選擇什麼樣的python框架開發,這個框架的優勢?

3、如何部署伺服器?本地伺服器調試,以及公網伺服器部署?

4、如果使用python框架開發移動後台服務,在開發源碼內使用哪種框架?mvc還是其它的,比如我返回json數據,每次json對象最外層有一些相同的東西,該如何處理?

5、python的後台服務最大能支持多大的pv量會嚴重影響用戶體驗性能?

6、如何兼顧 網頁前端以及移動端 開發的後台?

7、有沒用相關的案例,即用python開發的移動後台?有沒有該問題的開源項目?


1、如果使用python語言,需要學習哪些知識?

python作為一門簡單明了的語言,非常容易上手,語言層面不會太複雜,稍微有點難度的頂多就是裝飾器、元類和少量函數式編程內容。要說學習的話,我覺得更多是一些編程方面通用的東西,比如:數據結構和演算法、設計模式、操作系統、計算機網路之類的

2、選擇什麼樣的python框架開發,這個框架的優勢?

tornado,因為非阻塞io的原因,性能非常高,特別適合寫後端API(App的後端應該都是rest風格的api),而且成熟穩定

3、如何部署伺服器?本地伺服器調試,以及公網伺服器部署?

這個一兩句說不清楚,涉及到運維、測試、開發諸多方面, 部署和測試推薦幾個包:fabric、nose、unittest(python自帶),版本管理推薦git,持續集成推薦使用docker+jenkins

4、如果使用python框架開發移動後台服務,在開發源碼內使用哪種框架?mvc還是其它的,比如我返回json數據,每次json對象最外層有一些相同的東西,該如何處理?

MVC什麼的,一般的框架都差不多的,tornado也是支持的,返回json有相同的東西,寫個修飾器就完了

5、python的後台服務最大能支持多大的pv量會嚴重影響用戶體驗性能?

youtube、reddit、豆瓣、知乎這樣的大流量網站都是python寫的,我覺得你的App的規模不太可能遇到性能問題,即使有也應該不是python的問題,而是任何語言都會有問題。畢竟web後端不是計算密集型,而是io密集型的,python和其他語言的區別不會太大吧,大量的pv是可以靠堆伺服器堆出來的,如果是計算量比較大的任務,你可以考慮用c或c++寫

6、如何兼顧 網頁前端以及移動端 開發的後台?

用python寫的API,網頁和移動端都是可以調用啊,讓前端學學React,就可以輕鬆解決前後端分離這個問題(PS: facebook 就是後端php + 前端React,淘寶也有在用nodejs做前後端分離)

7、有沒用相關的案例,即用python開發的移動後台?有沒有該問題的開源項目?

這個應該比較少,App後端開源的不常見,而且大部分是rest風格的api,很多時候會涉及到自身的業務和敏感信息應該不會開源的吧(又不是bbs或者博客程序)

-------------------------------------------------------------------------------------

關於python學習推薦Full Stack Python ,可以看看這個:

Python 有哪些好的學習資料或者博客? - 彭泉鑫的回答


大家回答的都比較高大上,但是我覺得題主這會需要的是儘快入門,之後才好考慮那些複雜的問題。我的回答會偏向如何快速入門。

lz會寫代碼只是對服務端這一套還不熟,那麼現在需要的不是儘快的入服務端開發這個門,在這時候,不需要任何性能相關的,pv uv多少影響性能這種問題不是一個單純的數字就可以解決的,性能調優本身就是一個非常複雜極度依賴經驗的活兒,現在先不用管,等你入了門,應用到了那個瓶頸,自然會知道的,現在,不用管。

選python,你就成功了一半,個人感覺在小型後台上,python甩java8條街,上手快開發效率高,小項目的不二之選(大的就是java甩Python了...)

列一個小項目的通用技能點:

語言:Python

web service:apahce/nginx

框架:flask/Django

資料庫:mysql

伺服器:阿里雲

逐個回答一下題主的困惑:

1、如果使用python語言,需要學習哪些知識?

現階段需要熟悉的就是上面那些點:

Python語言很容易入門,有代碼基礎,很簡單

webservice:只需要會搭建就可以了,很簡單,教程非常多,Apache比較傳統資料多,nginx比較新效率高,2選1就可以了,現階段不需要考慮性能,如果是mac,自帶了Apache。

框架:flask比較靈活,django比較大而全,目前這兩個框架最主流資料多社區支持多,喜歡靈活就前者喜歡大而全就後者,個人喜歡flask。

資料庫:mysql無異議

伺服器:本地調試的話,本機起個Apache就可以了,要部署的話就阿里雲吧,買個入門的linux很便宜很方便,如果就個人玩玩,只需要買ecs(linux虛擬機),在裡面部署個mysql就可以了,如果要正經一點,就買ecs+rds,rds就是阿里雲提供的獨立的mysql服務。

基本知識點就這些。

2、選擇什麼樣的python框架開發,這個框架的優勢?

如上。

3、如何部署伺服器?本地伺服器調試,以及公網伺服器部署?

對個人項目來說,Python的部署相比java簡單很多,在部署方面跟php比較類似,只需要把代碼包放到apache的項目目錄下就可以了,不過你在開發過程中肯定需要用到各種包,比如flask框架包、MySQL-python之類的,需要的安裝一下就可以。

你可以寫一個shell腳本就可以了。

4、如果使用python框架開發移動後台服務,在開發源碼內使用哪種框架?mvc還是其它的,比如我返回json數據,每次json對象最外層有一些相同的東西,該如何處理?

flask之類的框架沒有提供嚴格的mvc約束,在寫代碼的時候自己有這個意識就好,小項目的話其實只需要把view區分好就好,m和c業務不複雜的話可以不用太區分,等你駕馭了這個框架了,再優化一下m和c,是很簡單的事情。json的包裝是需要自己寫的,一般就寫一個通用方法,傳入對象,返回json格式就好了。最外層的相同東西這種處理起來有很多種方式,簡單的你可以定義一個通用對象,這個對象就是用來跟api打交道的,裡面有一些通用屬性,比如errMsg,errCode之類的,再放一個對象屬性,用來存放你的業務結果對象,然後每次把業務結果對象set到這個通用對象中,把通用對象轉成json返回給客戶端就可以了。

5、python的後台服務最大能支持多大的pv量會嚴重影響用戶體驗性能?

不需要考慮這個,阿里雲最基礎的伺服器配置就可以輕鬆支撐幾十萬量級用戶的網站(不是幾十萬並發,這個量級的網站並發不算高)

6、如何兼顧 網頁前端以及移動端 開發的後台?

這個我理解應該是跟前端關係更大,不需要考慮兼顧,跟Python無關,通過js css適配就好了吧,不知道要表達的是不是這個意思。

7、有沒用相關的案例,即用python開發的移動後台?有沒有該問題的開源項目?

無,自己寫一個最簡單的就可以了,Python web入門很簡單。


給一套我用過的解決方案,用來開發過web項目(網頁 + ios)和手游項目(ios + 安卓),都是一套後台對應多種前端平台:

web框架:Django

Django 是一套相對全(zhong)面(yong)的框架,基本你要的功能都有,文檔很細緻,上手比較容易,開發效率比較高。自帶 auth、session、orm、admin 等功能,尤其是 admin,如果要求不是太高,用自帶的後台管理系統就能省下很多開發工作。

web server:nginx

相對 apache 較輕,簡潔。用來部署 django 也比較方便,可參考 Setting up Django and your web server with uWSGI and nginx

資料庫:mysql

這個不限定,看業務需求和開發者喜好。當然如果用了 django,自然最好選一個 orm 支持比較好的。

RESTful API:Tastypie

基於 Django 的 RESTful API。Django 本身作為一個 web 框架,返回的結果默認是渲染好的 html 文本。藉助 Tastypie,可以比較方便的製作 json 數據格式的介面,將前後端解耦合。這樣不管是網頁、iOS 還是 Android,都可以用同樣的介面。

再針對問題補充一下:

1、如果使用python語言,需要學習哪些知識?

python 語言本身,使用的框架,web 開發的通用知識,比如 HTTP 請求的處理流程、RESTful、OAuth 等。

2、選擇什麼樣的python框架開發,這個框架的優勢?

見上文。

3、如何部署伺服器?本地伺服器調試,以及公網伺服器部署?

Django 自帶本地調試服務,開發的時候用區域網地址調試即可。公網部署見上文。

4、如果使用python框架開發移動後台服務,在開發源碼內使用哪種框架?mvc還是其它的,比如我返回json數據,每次json對象最外層有一些相同的東西,該如何處理?

Tastypie 可以處理掉生成 json 數據時的很多體力活。

5、python的後台服務最大能支持多大的pv量會嚴重影響用戶體驗性能?

這個沒法給確切答案,具體情況會受機器硬體條件(CPU、內存、I/O)、網路帶寬、代碼質量、架構設計,甚至配置參數的影響。目前有較大型網站使用 python,並正常運作(參見 有哪些大型公司在使用 Python?有哪些知名項目是主要由 Python 寫成的? - Crossin 的回答),所以 python 本身不是問題。實踐時,做好壓力測試和上線後的性能監控,找出瓶頸不斷優化是王道。

6、如何兼顧 網頁前端以及移動端 開發的後台?

通過 API,後台無需知道是什麼平台在使用它。

7、有沒用相關的案例,即用python開發的移動後台?有沒有該問題的開源項目?

通常框架會自帶測試案例。真實案例開源的暫時不知道。如果哪天我把之前寫的開源了,再回來修改答案。


PYTHON可以用FLASK開發RESTFUL風格的API service。

可以參考這篇文章:

http://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask

不過你要兼顧網頁版本移動端開發。PYTHON就不太合適。你應該用Ruby on Rails。原生完美支持html、json、js、xml等方式的請求的響應。做RESTful Web service強大又方便。


我公司專做python外包項目。主要針對金融銀行業務。

對這個問題,應該看應用場景來得出一個最佳實踐。

首先,是企業應用開發。企業開發經常需要面對變動。需要穩定性和可靠性,同時代碼需要凸顯業務,減少有關計算機的部分,這在java叫做面向方面編程,其實就是增加抽象程度而已。比如類型轉化,許可權管理,就應該在代碼中盡量避免出現。

這裡我們使用的方案是pyramid框架+postgresql資料庫,如果圖方便就使用gunicorn來管理進程,比較uwsgi來說更加方便,而且性能沒有任何問題。如果考慮性能還有其他方案。python與pg資料庫簡直就是天作之合!

我們用pyramid框架寫的代碼讀起來就好像一個flat文件,幾乎一點縮進都沒有。我們的口號是沒有縮進!這在java來說,是不可想像的事情。

tornado也是一個選擇,但是應該特別謹慎的使用。因為這是一個非同步框架,如果新手很容易造成阻塞或者代碼亂成一團糟。

在實際項目中,我們還經常使用twisted,看應用場景,twisted可以說是一個工業級的框架,我們給一個銀行的項目中,twisted的進程曾經連續幾年穩定可靠的運行,實在太好用了。

而在一個電信的項目中,做一個伺服器,原定5個人月的一個網路伺服器項目,不到3天就搞定了!

我們還經常用到bottle這個框架,在某些業務場景中還是很好用的,比如在小型機端嵌入twisted中做web監控。

相比twisted,gevent更適合做一個客戶端的框架,比如同時ping一萬台主機,或者同時snmpget一萬台主機,使用gevent就比使用twisted在編程上容易很多,一萬台主機的掃描可以瞬間完成。

在非同步架構中,twisted更容易來編寫伺服器,而gevent則更容易用來做客戶端。

我們的一個監控產品中,就同時使用了這兩種技術,使用twisted來做被動監控伺服器。使用gevent來做輪詢掃描器。

django反而很少用到,它的orm實在太差了。我們要麼使用sqlalchemy,要麼就是使用自己封裝的一個orm庫,速度要快的多,但是簡單好用。

而flask其實我們也較少用到,這個組織出的jinja2模板反而用到各個地方。

django和flask這種框架,我們定義為互聯網級,可能學習起來容易,但是穩定性和性能距離其他幾個文中介紹到的框架還有一定的差距。

~~~~~~~~~~~~~~~~~~~~~

本著對客戶負責的態度,我們在項目選擇中盡量避免使用java和C++的組件。我們認為,使用這些組件是對客戶不負責任的態度。比如mongodb和mysql,他們能解決的問題還沒有造成麻煩多。

當然,QT和lucene還是不錯的。

所有,我們主要使用的技術是這樣的:

Pyramid, twisted, jinja2, redis, pandas,有的時候還會用rabbitmq

還有需要掌握的技術呢,就是restful三級架構。理解POST和PUT方法的差別。前端如果沒有更高的要求,就直接使用html5+bootstrap來解決,界面簡潔美觀速度夠快。

在通信方面,如果對外發布,就使用json,如果不對外發布,就使用messagepack

總之,應該根據不同的業務選擇不同的方案,要知道,在軟體這個領域,沒有萬能的靈丹妙藥。


謝邀,如果不複雜,後端直接用postgrest https://github.com/begriffs/postgrest 即可。

稍微複雜點的,那就flask,django都行,快速實現。


居然有人邀請我回答,甚是激動!

我後台開發水平一般般

除了語言層面的差別,使用Python做後台開發和其他語言開發後台,用到的知識其實是差不多了。除了上面回答提到的數據結構和演算法、設計模式、操作系統、計算機網路這些通用的之外,我覺得還需要了解一些後台開發里的基礎概念:

IO模型基本概念:非同步,同步,阻塞,非阻塞,多路復用(epoll)

並發模型:多進程模型,多線程模型,Reactor模型

Http協議:協議有哪些基本欄位,GET和POST的區別

web伺服器原理:建議去看看tinyhttp的源碼

負載均衡:一些基本的負載均衡演算法

網關協議:CGI,FastCGI,WCGI

進程間通訊:管道,消息隊列,信號等

其他:session,cookie,Restful API

Python框架用過一個:tornado。tornado框架集成了Web伺服器,它是採用目前比較流行非同步非阻塞並發模型,性能不錯,再加上Python的協程,可以實現一個高性能的web後台。如果使用tornado框架,由於tornado是單進程,不能利用多核CPU,所以部署的時候,可以每個CPU分配一個進程,supervisor守護tornado進程。同時建議使用nginx做前端做負載均衡和管理靜態資源。

至於Python性能問題,如果是IO密集型應用,可以考慮用非同步IO提高性能。如果是計算密集型,那性能的關鍵點就用C/C++寫吧,Python調用C/C++還是比較方便的。


看需求,簡單的需求可以直接用Flask,再配上Flask Restful 或者Flask Restless ,ORM上Flask SqlAlchemy 或者直接用SqlAlchemy,在弄個Flask Admin加上角色許可權管理。


可以使用flask框架開發REST API,無論什麼平台都能用


移動App發展,這是未來的趨勢。不需要學習Java 和C語言!

你只需要掌握JavaScript!我們可以使用React Native, Ionic, Cordova 等框架來構建移動App

現階段,現在你需要考慮什麼?

專註於你的事業

回去學習更多的數據結構

跟進現在的新技術

學習一門高級語言,類似於Java, C語言


我們公司用的Flask!感覺比較的靈活!理念也是比較先進!


直接Flask即可,Flask的代碼也比較好,可以深入學習研究。基於Flask做簡單的定製,足夠了。


謝邀 看樓上已經回答的很多了~


推薦閱讀:

怎麼做好互聯網公司的技術團隊負責人?
vysor的實現原理是什麼?
如何看待谷歌要求OEM廠家保留並不得修改安卓6.0的Doze省電模式?
請教手機製造廠商——手機屏幕顯示的顏色深淺(黑白)與耗電量的關係是怎樣的?
Android上有哪些比較好的開源 UI 組件?

TAG:Python | Python框架 | 移動開發 | 後台開發 | Python開發 |