⑴ tomcat能部署python程序嗎
不能,因為tomcat只是一個JAVA 的容器。
也就是說tomcat是在JVM的基礎上運行的(當然你要用JAVA寫一個python的代碼解釋器也不是沒可能,只是沒必要罷了)。
apache就可以部署python的web applcation 比較常用的是django這個框架。
(1)python部署工具擴展閱讀:
Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選,但是不能部署python程序。
對於一個初學者來說,可以這樣認為,當在一台機器上配置好Apache 伺服器,可利用它響應HTML(標准通用標記語言下的一個應用)頁面的訪問請求。
⑵ python工具有哪些
第一款:最強終端 Upterm
它是一個全平台的終端,可以說是終端里的IDE,有著強大的自動補全功能,之前的名字叫作:BlackWindow。有人跟他說這個名字不利於社區推廣,改名叫Upterm之後現在已經17000+Star了。
第二款:互動式解釋器 PtPython
一個互動式的Python解釋器,支持語法高亮、提示,甚至是VIM和emacs的鍵入模式。
第三款:包管理必備 Anaconda
強烈推薦:Anaconda。它能幫你安裝許多麻煩的東西,包括:Python環境、pip包管理工具、常用的庫、配置好環境路徑等等。這些小事情小白自己一個個去做的話,容易遇到各種問題,也容易造成挫敗感。如果你想用Python搞數據方面的事情,安裝它就可以了,它甚至開發了一套JIT的解釋器Numba。所以Anaconda有了JIT之後,對線上科學計算效率要求比較高的東西也可以搞定了。
第四款:編輯器 Sublime3
如果你是小白的話,推薦從PyCharm開始上手,但是有時候寫一些輕量的小腳本,就會想到輕量級一點的工具。Sublime3很多地方都有了極大的提升,並且用起來比原來還要簡單,配合安裝Anaconda或CodeIntel插件,可以讓Sublime3擁有近乎IDE的體驗。
第五款:前端在線編輯器 CodeSandbox
雖然這個不算是真正意義上的Python開發工具,但如果後端工程師想要寫前端的話,這個在線編輯器太方便了,節省了後端工程師的生命。不用安裝npm的幾千個包了,它已經在雲端完成了,才讓你直接就可以上手寫代碼、看效果。對於React、Vue這些主流前端框架都支持。
第六款:Python Tutor
Python
Tutor是一個免費教育工具,可幫助學生攻克編程學習中的基礎障礙,理解每一行源代碼在程序執行時在計算機中的過程。通過這個工具,教師或學生可以直接在web瀏覽器中編寫Python代碼,並逐步可視化地運行程序。
第七款:IPython
如何進行互動式編程?沒錯,就是通過IPython。IPython相對於Python自帶的shell要好用的多,並且能夠支持代碼縮進、TAB鍵補全代碼等功能。如果進行互動式編程,這是不可缺少的工具。
第八款:Jupyter Notebook
Jupyter
Notebook就像一個草稿本,能將文本注釋、數學方程、代碼和可視化內容全部組合到一個易於共享的文檔中,以Web頁面的方式展示,它是數據分析、機器學習的必備工具。
第九款:Pycharm
Pycharm是程序員常常使用的開發工具,簡單、易用,並且能夠設置不同的主題模式,根據自己的喜好來設置代碼風格。
第十款:Python Tutor
這個工具可能對初學者比較有用,而對於中高級程序員則用處較少。這個工具的特色是能夠清楚的理解每一行代碼是如何在計算機中執行的,中高級程序員一般通過分步調試可以實現類似的功能。這個工具對於最初接觸Python、最初來學習編程的同學還是非常有用的,初學者可以體驗一下。
⑶ 如何使用pycharm配合部署python的django框架
安裝軟體
安裝 Python 2.7、PyCharm、pip(Python包管理工具)、Django ( pip install Django)
部署
PyCharm 新建Django工程
完成後,其目錄如下:
子目錄MyDjangoProject下表示工程的全局配置,分別為setttings.py、urls.py和wsgi.py,其中setttings.py包括了系統的資料庫配置、應用配置和其他配置,urls.py則
表示web工程Url映射的配置。
子目錄student則是在該工程下創建的app,包含了models.py、tests.py和views.py等文件
templates目錄則為模板文件的目錄
manage.py是Django提供的一個管理工具,可以同步資料庫等等
啟動
創建完成後,就可以正常啟動了。點擊Run 按鈕,啟動時報錯了:
Traceback (most recent call last):
File "D:/workspace/MyDjangoProject/manage.py", line 10, in <mole>
execute_from_command_line(sys.argv)
File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line
utility.execute()
File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 312, in execute
django.setup()
File "D:\Python27\lib\site-packages\django\__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "D:\Python27\lib\site-packages\django\apps\registry.py", line 89, in populate
"plicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, plicates: admin
應該是admin配置沖突了,打開setttings.py文件,發現admin配置重復了
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'student',
)
注釋掉其中一行後(為什麼會有這個問題,估計是個bug),重新啟動,ok
web工程添加頁面
此時,我們尚沒有寫一行代碼,程序就ang跑起來了! 快添加一個Hello World的頁面吧。
打開student/views.py文件,輸入以下內容
def sayHello(request):
s = 'Hello World!'
current_time = datetime.datetime.now()
html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time)
return HttpResponse(html)
打開url.py文件,需要進行url映射的配置:
url(r'^student/', sayHello)
當用戶輸入http://**/student 時,便會調用sayHello方法,該方法通過HttpResponse()將頁面內容作為響應返回。
重啟服務,訪問http://localhost:8000/student/
在views.py頁面可以將頁面需要的元素通過字元串的形式,調用HttpResponse()類作為響應返回到瀏覽器。但這樣,頁面邏輯和頁面混合在一起,手寫起來很繁瑣,工作量比較大。如果我們需要展示一些動態的數據,而頁面基本不改變的情況下,該怎麼做呢?
比如在用戶訪問 http://localhost:8000/student/ 時,我們想動態展示一些學生的數據。可以這樣做:
首先在templates目錄下,新建 student.html文件,該文件作為模板,內容如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<ul>
{% for student in students %}
<li>
id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}
</li>
{% endfor %}
</ul>
</body>
</html>
修改 views.py文件,添加方法showStudents()
def showStudents(request):
list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
return render_to_response('student.html',{'students': list})
該方法將list作為動態數據,通過render_to_response方法綁定到模板頁面student.html上。
添加url映射,url(r'^showStudents/$', showStudents)
修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],
重啟服務,訪問http://localhost:8000/showStudents,出現:
至此,我們已可以正常將一些「動態」數據綁定到模板上了。但是怎麼樣訪問資料庫呢?
從資料庫獲取需要的數據,展示在頁面上?
首先需要安裝資料庫驅動啦,即mysql_python,
接著配置資料庫連接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'student',
'USER': 'root',
'PASSWORD': '1234',
'HOST': '127.0.0.1',
'PORT': '3306',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
配置完成之後,需要檢測資料庫配置是否正確,使用 manage.py shell命令,進入shell交互界面:
輸入:
from django.db import connection
cursor = connection.cursor()
如果不報錯,說明配置正確。
創建model,打開models.py,定義model如下:
class Student(models.Model)
id = models.BigIntegerField
name = models.CharField(max_length=20, default='a')
然後調用 manage.py syncdb
正常情況下,該步驟做完之後,model 會和資料庫保持一致性。但是在測試中,命令執行成功後,卻發現資料庫並沒有建立該表。
對於該種情況,做如下操作即可正常:
(1)注釋掉models.py文件代碼,執行 manage.py makemigerations student
【和manage.py migerate --fake】
(2)打開注釋,執行【 manage.py makemigerations student和 】manage.py migerate命令
通過以上兩步,便可正常操作了
views.py中添加方法:showRealStudents
def showRealStudents(request):
list = Student.objects.all()
return render_to_response('student.html', {'students': list})
urls.py添加映射 url(r'^showRealStudents/$', showRealStudents)
重啟服務,打開連接:http://localhost:8000/showRealStudents
頁面輸出正常。
至此,使用Django,可以正常操作資料庫,自定義模板,在頁面展示數據了。
伺服器
由於Django自帶輕量級的server,因此默認使用該server,但實際生產中是不允許這么乾的,生產環境中通常使用Apache Httpd Server結合mod_wsgi.so來做後端伺服器。
以下部署環境為:Python2.7.6
1、安裝httpd-2.2.25-win32-x86-no_ssl.msi
2、將下載好的mod_wsgi.so 放在 D:\Program Files\Apache Software Foundation\Apache2.2\moles 模塊下。
3、在新建的web工程 MyDjangoProject目錄下新建 django.wsgi文件
內容如下(相應的目錄需要修改):
import os
import sys
djangopath = "D:/Python27/Lib/site-packages/django/bin"
if djangopath not in sys.path:
sys.path.append(djangopath)
projectpath = 'D:/workspace/MyDjangoProject'
if projectpath not in sys.path:
sys.path.append(projectpath)
apppath = 'D:/workspace/MyDjangoProject/MyDjangoProject'
if apppath not in sys.path:
sys.path.append(apppath)
os.environ['DJANGO_SETTINGS_MODULE']='MyDjangoProject.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
4、修改httpd.conf ,添加如下:
LoadMole wsgi_mole moles/mod_wsgi.so
WSGIScriptAlias / "D:/workspace/MyDjangoProject/django.wsgi"
<Directory "D:/workspace/MyDjangoProject/">
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
ok,重啟server,頁面正常了。
在部署的過程中,遇到一個異常,如下:
The translation infrastructure cannot be initialized before the apps registry is ready
原因是django.wsgi一開始按照較為古老的寫法,改為新版本的寫法就Ok了。