我正在尝试构建一个仪表板,我有登录/注销部分,但有很多概念我仍然不太明白。就在这一刻,我正在努力建立这个:
这是一个应用程序,允许用户创建优惠,并在Facebook上作为Facebook应用程序在他们的粉丝中发布。
我遇到的问题是我不明白如何将视图,表单和网址放在一起以显示我想要的内容。
有什么我想念的吗?对不起,如果这个问题太愚蠢了。
我正在使用基于类的视图来构建它。这是我正在使用的代码:
在我的model.py中:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Offer(models.Model):
offer_owner = models.ForeignKey(User, related_name="offers")
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
business_name = models.CharField(max_length=255, verbose_name="nombre de la empresa")
offer_title = models.CharField(max_length=255, verbose_name="titulo de la oferta")
offer_date_from = models.DateTimeField(null=True, blank=False, editable=True, auto_now_add=False, verbose_name="fecha en que inicia la oferta")
offer_date_to = models.DateTimeField(null=True, blank=False, editable=True, auto_now_add=False, verbose_name="fecha en que finaliza la oferta")
offer_detail = models.TextField(verbose_name="detalles de la oferta")
offer_terms = models.TextField(verbose_name="terminos de la oferta")
published = models.BooleanField(default=True, verbose_name="esta oferta esta publica")
from_fanpage = models.CharField(max_length=255, verbose_name="nombre del fanpage") #fanpage info
fanpage_id = models.BigIntegerField(verbose_name="fanpage id")
fanpage_url = models.URLField(verbose_name="fanpage url")
def __unicode__(self):
return self.offer_title
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Offer(models.Model):
offer_owner = models.ForeignKey(User, related_name="offers")
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
business_name = models.CharField(max_length=255, verbose_name="nombre de la empresa")
offer_title = models.CharField(max_length=255, verbose_name="titulo de la oferta")
offer_date_from = models.DateTimeField(null=True, blank=False, editable=True, auto_now_add=False, verbose_name="fecha en que inicia la oferta")
offer_date_to = models.DateTimeField(null=True, blank=False, editable=True, auto_now_add=False, verbose_name="fecha en que finaliza la oferta")
offer_detail = models.TextField(verbose_name="detalles de la oferta")
offer_terms = models.TextField(verbose_name="terminos de la oferta")
published = models.BooleanField(default=True, verbose_name="esta oferta esta publica")
from_fanpage = models.CharField(max_length=255, verbose_name="nombre del fanpage") #fanpage info
fanpage_id = models.BigIntegerField(verbose_name="fanpage id")
fanpage_url = models.URLField(verbose_name="fanpage url")
def __unicode__(self):
return self.offer_title
在我的forms.py中:
from django import forms
from django.forms import ModelForm
from models import Offer, Consumer
# Login Form
#class LoginForm(forms.Form):
# username = forms.EmailField()
# password = forms.CharField(widget=forms.PasswordInput())
class OfferForm(ModelForm):
class Meta:
model = Offer
exclude = ["offer_owner"]
class ConsumerForm(ModelForm):
class Meta:
model = Consumer
# exclude = ["offer_obtained", ""]
在我的views.py中:
from django import forms
from django.forms import ModelForm
from models import Offer, Consumer
# Login Form
#class LoginForm(forms.Form):
# username = forms.EmailField()
# password = forms.CharField(widget=forms.PasswordInput())
class OfferForm(ModelForm):
class Meta:
model = Offer
exclude = ["offer_owner"]
class ConsumerForm(ModelForm):
class Meta:
model = Consumer
# exclude = ["offer_obtained", ""]
在我的urls.py中:
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.template import RequestContext
from django.shortcuts import render_to_response, render
from django.core.exceptions import ObjectDoesNotExist
from django.views.generic import ListView
from django.views.generic.edit import UpdateView
from django.core.urlresolvers import reverse
from forms import *
from django import forms
from django.shortcuts import redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from .models import Offer
# forms
class LoginForm(forms.Form):
username = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput())
#view for the login
def login_usr(request):
if request.method=="POST":
form = LoginForm(request.POST)
if form.is_valid():
print "form is valid"
# user registration or login
username,pwd=request.POST.get("username",None),request.POST.get("password")
if not username or not pwd:
return HttpResponse("Username or password not present")
try:
user=User.objects.get(username=username)
except ObjectDoesNotExist,ex:
# print "Creating new user ..."
print "error ..."
return HttpResponse("No estas registrado en el sistema, registrate")
# user=User.objects.create_user(username,username,pwd)
if user:
print "Authenticating ..."
user=authenticate(username=username,password=pwd)
print "Logging in user"
login(request,user)
return redirect("dashboard")
else:
print "form is not valid"
return render_to_response("login.html", {'form':form}, RequestContext(request))
else:
return render_to_response("login.html", {'form':LoginForm()}, RequestContext(request))
def logout_usr(request):
logout(request)
return redirect("login")
#view for the dashboard
@login_required(login_url="/offers/login/")
def dashboard(request, *args, **kwargs):
offer_list = Offer.objects.all()
template_name = "dashboard.html"
context = {
"offer_list": offer_list
}
return render(request, template_name, context)
#view for the dashboard list of offers
class OfferListView(ListView):
model = Offer
#view for the dashboard's form detail from the list of offers
class OfferUpdateView(UpdateView):
model = Offer
form_class = OfferForm
template_name = "offers_update_form.html"
# public view for the offer, this could be in a facebook canvas, or a public website that will be mobile or desktop.
@csrf_exempt
def app_public(request, pk, *args, **kwargs):
offer = Offer.objects.get(pk=pk, published=True)
template_name = "app_public.html"
context = {
"offer" : offer
}
return render(request, template_name, context)
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.template import RequestContext
from django.shortcuts import render_to_response, render
from django.core.exceptions import ObjectDoesNotExist
from django.views.generic import ListView
from django.views.generic.edit import UpdateView
from django.core.urlresolvers import reverse
from forms import *
from django import forms
from django.shortcuts import redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from .models import Offer
# forms
class LoginForm(forms.Form):
username = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput())
#view for the login
def login_usr(request):
if request.method=="POST":
form = LoginForm(request.POST)
if form.is_valid():
print "form is valid"
# user registration or login
username,pwd=request.POST.get("username",None),request.POST.get("password")
if not username or not pwd:
return HttpResponse("Username or password not present")
try:
user=User.objects.get(username=username)
except ObjectDoesNotExist,ex:
# print "Creating new user ..."
print "error ..."
return HttpResponse("No estas registrado en el sistema, registrate")
# user=User.objects.create_user(username,username,pwd)
if user:
print "Authenticating ..."
user=authenticate(username=username,password=pwd)
print "Logging in user"
login(request,user)
return redirect("dashboard")
else:
print "form is not valid"
return render_to_response("login.html", {'form':form}, RequestContext(request))
else:
return render_to_response("login.html", {'form':LoginForm()}, RequestContext(request))
def logout_usr(request):
logout(request)
return redirect("login")
#view for the dashboard
@login_required(login_url="/offers/login/")
def dashboard(request, *args, **kwargs):
offer_list = Offer.objects.all()
template_name = "dashboard.html"
context = {
"offer_list": offer_list
}
return render(request, template_name, context)
#view for the dashboard list of offers
class OfferListView(ListView):
model = Offer
#view for the dashboard's form detail from the list of offers
class OfferUpdateView(UpdateView):
model = Offer
form_class = OfferForm
template_name = "offers_update_form.html"
# public view for the offer, this could be in a facebook canvas, or a public website that will be mobile or desktop.
@csrf_exempt
def app_public(request, pk, *args, **kwargs):
offer = Offer.objects.get(pk=pk, published=True)
template_name = "app_public.html"
context = {
"offer" : offer
}
return render(request, template_name, context)
在我的模板中: 这是主视图,我在其中放置了项目列表
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
from offers.views import *
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'thesocialbrand.views.home', name='home'),
# url(r'^thesocialbrand/', include('thesocialbrand.foo.urls')),
url(r'^dashboard/', OfferListView.as_view(), name='dashboard'),
url(r'^dashboard/edit/(?P<pk>\d+)/$', OfferUpdateView.as_view(), name="edit"),
# url(r'^dashboard/(?P<pk>\d+)/$', dashboard_offer_detail),
# url(r'^app/', app_public, name='app'),
url(r'^app/(?P<pk>\d+)/$', app_public),
url(r'^login/', login_usr, name='login'),
url(r'^logout/', logout_usr, name='logout'),
)
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
from offers.views import *
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'thesocialbrand.views.home', name='home'),
# url(r'^thesocialbrand/', include('thesocialbrand.foo.urls')),
url(r'^dashboard/', OfferListView.as_view(), name='dashboard'),
url(r'^dashboard/edit/(?P<pk>\d+)/$', OfferUpdateView.as_view(), name="edit"),
# url(r'^dashboard/(?P<pk>\d+)/$', dashboard_offer_detail),
# url(r'^app/', app_public, name='app'),
url(r'^app/(?P<pk>\d+)/$', app_public),
url(r'^login/', login_usr, name='login'),
url(r'^logout/', logout_usr, name='logout'),
)
这是我的表单的更新视图的视图。单击列表中的某个项目后,我的表单的详细信息。
当我完成这个时,我会在我的博客中写一篇文章,解释我发现的所有这些内容。对于处于同样情况的其他初学者来说,它肯定会有用,也许需要建立类似的东西。{% load url from future %}
<h1>Dashboard</h1>
<h4>Hola {{ user }}</h4>
<a href="/offers/logout/">Logout</a>
<h3>Mis ofertas</h3>
<ul>
{% for offer in offer_list %}
<li><a href="{% url 'edit' offer.pk %}">{{ offer.offer_title }}</a></li>
{% empty %}
<li>Sorry, no offers yet. Check back soon!</li>
{% endfor %}
</ul>