第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用pycharm配合部署python的django框架 ?

如何使用pycharm配合部署python的django框架 ?

MM們 2018-12-14 13:15:52
如何使用pycharm配合部署python的django框架 
查看完整描述

1 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

安裝軟件
安裝 Python 2.7、PyCharm、pip(Python包管理工具)、Django ( pip install Django)

部署
PyCharm 新建Django工程

完成后,其目錄如下:

子目錄MyDjangoProject下表示工程的全局配置,分別為setttings.py、urls.py和wsgi.py,其中setttings.py包括了系統(tǒng)的數(shù)據(jù)庫(kù)配置、應(yīng)用配置和其他配置,urls.py則
表示web工程Url映射的配置。
子目錄student則是在該工程下創(chuàng)建的app,包含了models.py、tests.py和views.py等文件
templates目錄則為模板文件的目錄
manage.py是Django提供的一個(gè)管理工具,可以同步數(shù)據(jù)庫(kù)等等

啟動(dòng)
創(chuàng)建完成后,就可以正常啟動(dòng)了。點(diǎn)擊Run 按鈕,啟動(dòng)時(shí)報(bào)錯(cuò)了:

Traceback (most recent call last):
File "D:/workspace/MyDjangoProject/manage.py", line 10, in <module>
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
"duplicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: admin

應(yīng)該是admin配置沖突了,打開(kāi)setttings.py文件,發(fā)現(xiàn)admin配置重復(fù)了

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'student',
)

注釋掉其中一行后(為什么會(huì)有這個(gè)問(wèn)題,估計(jì)是個(gè)bug),重新啟動(dòng),ok

web工程添加頁(yè)面

此時(shí),我們尚沒(méi)有寫(xiě)一行代碼,程序就duang跑起來(lái)了! 快添加一個(gè)Hello World的頁(yè)面吧。

打開(kāi)student/views.py文件,輸入以下內(nèi)容

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)

打開(kāi)url.py文件,需要進(jìn)行url映射的配置:

url(r'^student/', sayHello)

當(dāng)用戶輸入http://**/student 時(shí),便會(huì)調(diào)用sayHello方法,該方法通過(guò)HttpResponse()將頁(yè)面內(nèi)容作為響應(yīng)返回。

重啟服務(wù),訪問(wèn)http://localhost:8000/student/

在views.py頁(yè)面可以將頁(yè)面需要的元素通過(guò)字符串的形式,調(diào)用HttpResponse()類作為響應(yīng)返回到瀏覽器。但這樣,頁(yè)面邏輯和頁(yè)面混合在一起,手寫(xiě)起來(lái)很繁瑣,工作量比較大。如果我們需要展示一些動(dòng)態(tài)的數(shù)據(jù),而頁(yè)面基本不改變的情況下,該怎么做呢?
比如在用戶訪問(wèn) http://localhost:8000/student/ 時(shí),我們想動(dòng)態(tài)展示一些學(xué)生的數(shù)據(jù)??梢赃@樣做:
首先在templates目錄下,新建 student.html文件,該文件作為模板,內(nèi)容如下:

<!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作為動(dòng)態(tài)數(shù)據(jù),通過(guò)render_to_response方法綁定到模板頁(yè)面student.html上。

添加url映射,url(r'^showStudents/$', showStudents)
修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],

重啟服務(wù),訪問(wèn)http://localhost:8000/showStudents,出現(xiàn):

至此,我們已可以正常將一些“動(dòng)態(tài)”數(shù)據(jù)綁定到模板上了。但是怎么樣訪問(wèn)數(shù)據(jù)庫(kù)呢?
從數(shù)據(jù)庫(kù)獲取需要的數(shù)據(jù),展示在頁(yè)面上?

首先需要安裝數(shù)據(jù)庫(kù)驅(qū)動(dòng)啦,即mysql_python,
接著配置數(shù)據(jù)庫(kù)連接:

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'),
}
}

配置完成之后,需要檢測(cè)數(shù)據(jù)庫(kù)配置是否正確,使用 manage.py shell命令,進(jìn)入shell交互界面
輸入:

from django.db import connection
cursor = connection.cursor()

如果不報(bào)錯(cuò),說(shuō)明配置正確。
創(chuàng)建model,打開(kāi)models.py,定義model如下:

class Student(models.Model)
id = models.BigIntegerField
name = models.CharField(max_length=20, default='a')

然后調(diào)用 manage.py syncdb
正常情況下,該步驟做完之后,model 會(huì)和數(shù)據(jù)庫(kù)保持一致性。但是在測(cè)試中,命令執(zhí)行成功后,卻發(fā)現(xiàn)數(shù)據(jù)庫(kù)并沒(méi)有建立該表。
對(duì)于該種情況,做如下操作即可正常:
(1)注釋掉models.py文件代碼,執(zhí)行 manage.py makemigerations student
【和manage.py migerate --fake】
(2)打開(kāi)注釋,執(zhí)行【 manage.py makemigerations student和 】manage.py migerate命令
通過(guò)以上兩步,便可正常操作了

views.py中添加方法:showRealStudents

def showRealStudents(request):
list = Student.objects.all()
return render_to_response('student.html', {'students': list})

urls.py添加映射 url(r'^showRealStudents/$', showRealStudents)

重啟服務(wù),打開(kāi)連接:http://localhost:8000/showRealStudents
頁(yè)面輸出正常。
至此,使用Django,可以正常操作數(shù)據(jù)庫(kù),自定義模板,在頁(yè)面展示數(shù)據(jù)了。

服務(wù)器
由于Django自帶輕量級(jí)的server,因此默認(rèn)使用該server,但實(shí)際生產(chǎn)中是不允許這么干的,生產(chǎn)環(huán)境中通常使用Apache Httpd Server結(jié)合mod_wsgi.so來(lái)做后端服務(wù)器。

以下部署環(huán)境為: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\modules 模塊下。
3、在新建的web工程 MyDjangoProject目錄下新建 django.wsgi文件
內(nèi)容如下(相應(yīng)的目錄需要修改):

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 ,添加如下:

LoadModule wsgi_module modules/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,頁(yè)面正常了。
在部署的過(guò)程中,遇到一個(gè)異常,如下:
The translation infrastructure cannot be initialized before the apps registry is ready
原因是django.wsgi一開(kāi)始按照較為古老的寫(xiě)法,改為新版本的寫(xiě)法就Ok了。



查看完整回答
反對(duì) 回復(fù) 2019-01-06
  • 1 回答
  • 0 關(guān)注
  • 1171 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)