찾다
백엔드 개발파이썬 튜토리얼使用PyCharm配合部署Python的Django框架的配置纪实

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

部署
PyCharm 新建Django工程

20151119154704840.png (657×231)

完成后,其目录如下:

20151119154725930.png (463×365)

子目录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 <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

应该是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

20151119154746196.png (523×134)

web工程添加页面
 
此时,我们尚没有写一行代码,程序就duang跑起来了! 快添加一个Hello World的页面吧。
 
打开student/views.py文件,输入以下内容

def sayHello(request):
  s = 'Hello World!'
  current_time = datetime.datetime.now()
  html = '<html><head></head><body><h1 id="s"> %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/

20151119154827451.png (498×159)

在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,出现:

20151119154844588.png (523×146)

至此,我们已可以正常将一些“动态”数据绑定到模板上了。但是怎么样访问数据库呢?
从数据库获取需要的数据,展示在页面上?
 
首先需要安装数据库驱动啦,即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\modules 模块下。
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 ,添加如下:

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,页面正常了。
在部署的过程中,遇到一个异常,如下:
The translation infrastructure cannot be initialized before the apps registry is ready
原因是django.wsgi一开始按照较为古老的写法,改为新版本的写法就Ok了。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python의 하이브리드 접근법 : 컴파일 및 해석 결합Python의 하이브리드 접근법 : 컴파일 및 해석 결합May 08, 2025 am 12:16 AM

PythonuseSahybrideactroach, combingingcompytobytecodeandingretation.1) codeiscompiledToplatform-IndependentBecode.2) bytecodeistredbythepythonvirtonmachine, enterancingefficiency andportability.

Python 's 'for'와 'whind'루프의 차이점을 배우십시오Python 's 'for'와 'whind'루프의 차이점을 배우십시오May 08, 2025 am 12:11 AM

"for"and "while"loopsare : 1) "에 대한"loopsareIdealforitertatingOverSorkNowniterations, whide2) "weekepindiTeRations.Un

Python Concatenate는 중복과 함께 목록입니다Python Concatenate는 중복과 함께 목록입니다May 08, 2025 am 12:09 AM

Python에서는 다양한 방법을 통해 목록을 연결하고 중복 요소를 관리 할 수 ​​있습니다. 1) 연산자를 사용하거나 ()을 사용하여 모든 중복 요소를 유지합니다. 2) 세트로 변환 한 다음 모든 중복 요소를 제거하기 위해 목록으로 돌아가지 만 원래 순서는 손실됩니다. 3) 루프 또는 목록 이해를 사용하여 세트를 결합하여 중복 요소를 제거하고 원래 순서를 유지하십시오.

파이썬 목록 연결 성능 ​​: 속도 비교파이썬 목록 연결 성능 ​​: 속도 비교May 08, 2025 am 12:09 AM

fastestestestedforListCancatenationInpythondSpendsonListsize : 1) Forsmalllist, OperatoriseFficient.2) ForlargerLists, list.extend () OrlistComprehensionIsfaster, withextend () morememory-efficientBymodingListsin-splace.

Python 목록에 요소를 어떻게 삽입합니까?Python 목록에 요소를 어떻게 삽입합니까?May 08, 2025 am 12:07 AM

toInsertElmentsIntoapyThonList, useAppend () toaddtotheend, insert () foraspecificposition, andextend () andextend () formultipleElements.1) useappend () foraddingsingleitemstotheend.2) useinsert () toaddatespecificindex, 그러나)

Python은 후드 아래에 동적 배열 또는 링크 된 목록이 있습니까?Python은 후드 아래에 동적 배열 또는 링크 된 목록이 있습니까?May 07, 2025 am 12:16 AM

pythonlistsareimplementedesdynamicarrays, notlinkedlists.1) thearestoredIntIguousUousUousUousUousUousUousUousUousUousInSeripendExeDaccess, LeadingSpyTHOCESS, ImpactingEperformance

파이썬 목록에서 요소를 어떻게 제거합니까?파이썬 목록에서 요소를 어떻게 제거합니까?May 07, 2025 am 12:15 AM

PythonoffersfourmainmethodstoremoveElementsfromalist : 1) 제거 (값) 제거 (값) removesthefirstoccurrencefavalue, 2) pop (index) 제거 elementatAspecifiedIndex, 3) delstatemeveselementsByindexorSlice, 4) RemovesAllestemsfromTheChmetho

스크립트를 실행하려고 할 때 '허가 거부'오류가 발생하면 무엇을 확인해야합니까?스크립트를 실행하려고 할 때 '허가 거부'오류가 발생하면 무엇을 확인해야합니까?May 07, 2025 am 12:12 AM

Toresolvea "permissionDenied"오류가 발생할 때 오류가 발생합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.