Cómo usar pycharm para implementar el marco Django para Python
Instalar Python 2.7, PyCharm, pip (herramienta de administración de paquetes de Python), Django (pip install Django)
Implementar
PyCharm Crear un nuevo proyecto Django
Una vez completado, el directorio es el siguiente:
El subdirectorio MyDjangoProject contiene la configuración global del proyecto, que son settings.py, urls.py y wsgi.py. py, urls.py y wsgi.py, donde settings.py incluye la configuración de la base de datos del sistema, la configuración de la aplicación y otras configuraciones, mientras que urls.py
representa la configuración de mapeo de URL del proyecto web.
El subdirectorio estudiantes es la aplicación creada en este proyecto y contiene archivos como models.py, tests.py y views.py
El directorio de plantillas es el directorio de archivos de plantillas p >
manage.py es una herramienta de administración proporcionada por Django, utilizada para sincronizar bases de datos, etc. Al hacer clic en el botón Ejecutar se produce un error al iniciar:
Rastreo (llamada más reciente):
Archivo "D:/workspace/MyDjangoProject/manage.py", línea 10, en < módulo >>p>
ejecutar_from_command_line(sys.argv)
Archivo "D:\Python27\libs\site-packages\django\coremanagement\init__.py", línea 338, en ejecutar_from_command_line
utilidad.execute()
Archivo "D:\Python27\libsite-packages\django\core\management__init__.py", línea 312, en ejecutar
utilidad.populate(settings.INSTALLED_APPS)
Archivo "D:\Python27\libsite-packages\django\appsregistry.py", línea 89, en populate
"duplicados: %s " % app_config.label)
django.core.exceptions.ImproperlyConfigured: la etiqueta de la aplicación no es única, duplicada: admin<
Debería ser un conflicto de configuración del administrador. staticfiles',
'django.contrib.admin',
'student',
)
Después de comentar uno de los líneas (¿Por qué ocurre este problema? Supongo que es un error), reinícielo, está bien
página de adición del proyecto web
En este punto, el programa ya comenzó a ejecutarse antes de que escrito una línea de código! Agreguemos una página Hola Mundo.
Abra el archivo estudiante/views.py e ingrese el siguiente contenido
def sayHello(solicitud):
s = '¡Hola mundo!'
current_time = datetime.datetime.now()
html = '
%s
%s p>' % (s, current_time)
Devolver HttpResponse(html)
Abre el archivo url.py. py, debe configurar la asignación de URL:
url(r'^student/', sayHello)
Cuando el usuario ingresa http:/// /**/student , se llamará al método sayHello y el contenido de la página se devolverá como respuesta a través de HttpResponse().
Reinicie el servicio y visite http://localhost:8000/student/
En la página views.py, puede agregar los elementos requeridos por la página llamando a HttpResponse( ) clase Devuelta al navegador como respuesta como una cadena. Sin embargo, este método combinará la lógica de la página con la página, lo que es más complicado de escribir a mano y la carga de trabajo es relativamente grande. ¿Qué debemos hacer si necesitamos mostrar algunos datos dinámicos y la página básicamente no ha cambiado?
Por ejemplo, queremos mostrar dinámicamente algunos datos de los estudiantes cuando el usuario visita http://localhost:8000/student/. Puedes hacer esto:
Primero, crea un nuevo archivo Student.html en el directorio de plantillas como plantilla, que contenga el siguiente contenido:
p>
id: {{ estudiante.id }}, nombre: {{ estudiante.nombre }}, edad: {{ estudiante.edad }}
{% por estudiante en estudiantes %}
{% endfor %}
Modificar la vista. py y agregue showStudents()
def showStudents(request):
list = [{id: 1, 'name': ' Jack'}, {id: 2, ' name': 'Rose'}]
return render_to_response('student.html',{'students':list})
Este método trata la lista como datos dinámicos y pasa el El método render_to_response lo vincula a la plantilla. El método de respuesta está vinculado a la página de plantilla Student.html.
Agregar mapeo de URL, url(r'^showStudents/$', showStudents)
Modificar la configuración de la plantilla settings.py: 'DIRS': [BASE_DIR+r'\templates'] ,
Reinicie el servicio, visite http://localhost:8000/showStudents y listo:
Hasta ahora hemos podido transferir algunos datos "dinámicos" normalmente. a la plantilla. Pero ¿qué pasa con el acceso a la base de datos?
¿Obtener los datos requeridos de la base de datos y mostrarlos en la página?
'NOMBRE': 'estudiante',
'USUARIO': 'raíz',
'CONTRASEÑA': 1234',
'HOST': '127.0.0.1',
'PUERTO': '3306',
#'NOMBRE': os.path.join(BASE_DIR, 'db.sqlite3 '),
}
}
Una vez completada la configuración, debe usar el comando de shell Manage.py para probar si la base de datos está configurada correctamente. . Comando py shell para ingresar a la interfaz interactiva del shell:
Entrada:
desde django.db importar conexión
cursor = conexión.cursor()
Si no se producen errores, la configuración es correcta.
Cree un modelo, abra models.py y defina el modelo de la siguiente manera:
class Student(models.Model)
id = models.BigIntegerField
name = models.CharField (max_length=20, default='a')
Luego llame a managers.py syncdb
Normalmente, después de completar este paso, el El modelo será el mismo que La base de datos permanece consistente. Sin embargo, durante las pruebas, después de que el comando se ejecutó con éxito, se descubrió que no se había creado ninguna tabla en la base de datos.
En este caso, puede realizar las siguientes operaciones normalmente:
(1) Comente el código del archivo models.py y ejecute Manage.py makemigerations Student.
y Manage.py migrate --fake
(2) Abrir comentarios. Ejecute los comandos Manage.py Makemigerations Student y Manage.py Migrate
Después de los dos pasos anteriores, se ejecuta normalmente
Agregue un método en views.py: showRealStudents
def showRealStudents(solicitud):
lista = Student.objects.all()
return render_to_response('student.html', {'estudiantes': lista}) p>
urls.py agregar URL de mapeo(r'^showRealStudents/$', showRealStudents)
Reinicie el servicio y abra la conexión: http://localhost:8000/showRealStudents
La salida de la página es normal.
Hasta ahora, puedes usar Django para operar la base de datos, personalizar plantillas y mostrar datos en la página.
Servidor
Dado que Django viene con un servidor liviano, usa el servidor de forma predeterminada. Sin embargo, esto no está permitido en la producción real. El entorno de producción generalmente usa el servidor Apache Httpd combinado. mod_wsgi. para ser el servidor backend.
El entorno de implementación es el siguiente: Python2.7.6
1 Instale httpd-2.2.25-win32-x86-no_ssl.msi
2. D:\ Descargue mod_wsgi.so en el módulo Archivos de programa\Apache Software Foundation\Apache2.2\modules.
3. Cree un nuevo archivo django.wsgi en el directorio MyDjangoProject del proyecto web recién creado
El contenido es el siguiente (es necesario modificar el directorio correspondiente):
p>
importar sistema operativo
importar sistema
djangopath = "D:/Python27/Lib/site-packages/django/bin"
if djangopath no en la ruta del sistema:
sys.path.append(djangopath)
projectpath = 'D:/workspace/MyDjangoProject'
si la ruta del proyecto no está en el sistema. .path:
sys.path.append(projectpath)
apppath = 'D:/workspace/ MyDjangoProject/MyDjangoProject'
si apppath no está en sys. ruta:
p>sys.path.append(apppath)
apppath = 'D:/workspace/ MyDjangoProject/MyDjangoProject'
si apppath no está en el sistema .path:
sys.path.append(apppath)
4. Modifique httpd.conf y agregue el siguiente contenido:
LoadModule wsgi_module module/mod_wsgi. entonces
WSGIScriptAlias / "D:/workspace/MyDjangoProject/ django.wsgi"
Opciones FollowSymLinks
AllowOverride Ninguno
Orden denegar, permitir
Permitir de todos
Bien, reinicie el servidor y la página será normal.
Durante el proceso de implementación, encontré la siguiente excepción:
La infraestructura de traducción no se puede inicializar antes de que el registro de la aplicación esté listo
La razón es que django. wsgi está escrito en una forma antigua.