Entrada de usuario muy simple en Django.

Mi lucha subyacente es que tengo problemas para entender cómo las plantillas, las vistas y las URL de Django están unidas entre sí … w / Python modelo no consultas en bruto sql)? ¿Debo usar los métodos GET y POST? ¿Debo usar un formulario? ¿Necesito usar una plantilla o puedo usar una vista genérica?

cuando bash enviar una entrada, simplemente vuelve a cargar la página de entrada.

views.py:

from django.shortcuts import render from django.shortcuts import HttpResponse from People.models import Person def index(request): return render(request, 'People/index.html') def search(request): search_id = request.POST.get('textfield', None) try: user = Person.objects.get(MAIN_AUTHOR = search_id) #do something with user html = ("

%s

", user) return HttpResponse(html) except Person.DoesNotExist: return HttpResponse("no such user")

urls.py

 from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^People/', 'People.views.index'), url(r'^People/send/', 'People.views.search'), ) 

modelo:

  {% csrf_token %}    

¿Me estoy perdiendo algo o haciendo algo mal?

Si comprendo correctamente, desea recibir información del usuario, consultar la base de datos y mostrar los resultados del usuario según la entrada. Para esto puedes crear un simple formulario django que tomará la entrada. Luego puede pasar el parámetro a una vista en la solicitud GET y consultar la base de datos para la palabra clave.

EDITAR : He editado el código. Debería funcionar ahora.

vistas.py

 from django.shortcuts import render from django.shortcuts import HttpResponse from .models import Person from django.core.exceptions import * def index(request): return render(request, 'form.html') def search(request): if request.method == 'POST': search_id = request.POST.get('textfield', None) try: user = Person.objects.get(name = search_id) #do something with user html = ("

%s

", user) return HttpResponse(html) except Person.DoesNotExist: return HttpResponse("no such user") else: return render(request, 'form.html')

urls.py

 from django.conf.urls import patterns, include, url from People.views import * urlpatterns = patterns('', url(r'^search/', search), url(r'^index/', index) ) 

form.html

 
{% csrf_token %}

También asegúrese de colocar sus plantillas en una carpeta separada llamada templates y agregue esto en su settings.py :

 TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), '../templates').replace('\\','/'), ) 

Para una entrada de usuario, necesitará 2 vistas: una para mostrar la página con el formulario y otra para procesar los datos. Engancha la primera vista a una url, di “feedback /”, y la otra a una url como “feedback / send /”. También debe especificar esta segunda url en su etiqueta de formulario.

 
...

Ahora, en la segunda vista, puede obtener los datos del formulario y hacer lo que quiera con ellos.

 def second_view(request): if request.method == "POST": get_text = request.POST["textfield"] # Do whatever you want with the data 

Echa un vistazo a esta página Diversión con formularios . Te dará la comprensión básica. También aconsejaría trabajar a través de todo el libro. Debe usar ether GET o POST (GET probablemente no sea seguro). El uso del formulario no es obligatorio, ya que puede diseñarlo y realizar toda la validación usted mismo y luego pasar los datos directamente al modelo.