mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-20 11:51:05 -05:00
Add ability to have named urls.
This commit is contained in:
@@ -8,8 +8,9 @@ __version__ = '.'.join([str(x) for x in VERSION])
|
|||||||
class DjrillAdminSite(AdminSite):
|
class DjrillAdminSite(AdminSite):
|
||||||
index_template = "djrill/index.html"
|
index_template = "djrill/index.html"
|
||||||
custom_views = []
|
custom_views = []
|
||||||
|
custom_urls = []
|
||||||
|
|
||||||
def register_view(self, path, view, name=None):
|
def register_view(self, path, view, name, display_name=None):
|
||||||
"""Add a custom admin view.
|
"""Add a custom admin view.
|
||||||
|
|
||||||
* `path` is the path in the admin where the view will live, e.g.
|
* `path` is the path in the admin where the view will live, e.g.
|
||||||
@@ -18,25 +19,33 @@ class DjrillAdminSite(AdminSite):
|
|||||||
* `name` is an optional pretty name for the list of custom views. If
|
* `name` is an optional pretty name for the list of custom views. If
|
||||||
empty, we'll guess based on view.__name__.
|
empty, we'll guess based on view.__name__.
|
||||||
"""
|
"""
|
||||||
self.custom_views.append((path, view, name))
|
self.custom_views.append((path, view, name, display_name))
|
||||||
|
|
||||||
|
def register_url(self, path, view, name):
|
||||||
|
self.custom_urls.append((path, view, name))
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
"""Add our custom views to the admin urlconf."""
|
"""Add our custom views to the admin urlconf."""
|
||||||
urls = super(DjrillAdminSite, self).get_urls()
|
urls = super(DjrillAdminSite, self).get_urls()
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls.defaults import patterns, url
|
||||||
for path, view, name in self.custom_views:
|
for path, view, name, display_name in self.custom_views:
|
||||||
urls += patterns('',
|
urls += patterns('',
|
||||||
url(r'^%s$' % path, self.admin_view(view)),
|
url(r'^%s$' % path, self.admin_view(view), name=name),
|
||||||
)
|
)
|
||||||
|
for path, view, name in self.custom_urls:
|
||||||
|
urls += patterns('',
|
||||||
|
url(r'^%s$' % path, self.admin_view(view), name=name),
|
||||||
|
)
|
||||||
|
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
def index(self, request, extra_context=None):
|
def index(self, request, extra_context=None):
|
||||||
"""Make sure our list of custom views is on the index page."""
|
"""Make sure our list of custom views is on the index page."""
|
||||||
if not extra_context:
|
if not extra_context:
|
||||||
extra_context = {}
|
extra_context = {}
|
||||||
custom_list = [(path, name if name else
|
custom_list = [(path, display_name if display_name else
|
||||||
capfirst(view.__name__)) for path, view, name in
|
capfirst(view.__name__)) for path, view, name, display_name in
|
||||||
self.custom_views]
|
self.custom_views]
|
||||||
# Sort views alphabetically.
|
# Sort views alphabetically.
|
||||||
custom_list.sort(key=lambda x: x[1])
|
custom_list.sort(key=lambda x: x[1])
|
||||||
extra_context.update({
|
extra_context.update({
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from djrill.views import DjrillIndexView, DjrillSendersListView
|
from djrill.views import (DjrillIndexView, DjrillSendersListView,
|
||||||
|
DjrillDisableSenderView)
|
||||||
|
|
||||||
admin.site.register_view("djrill/senders/", DjrillSendersListView.as_view(),
|
admin.site.register_view("djrill/senders/", DjrillSendersListView.as_view(),
|
||||||
"senders")
|
"djrill_sender", "senders")
|
||||||
admin.site.register_view("djrill/status/", DjrillIndexView.as_view(), "status")
|
admin.site.register_view("djrill/status/", DjrillIndexView.as_view(),
|
||||||
|
"djrill_status", "status")
|
||||||
|
|
||||||
|
admin.site.register_url("djrill/disable/sender/",
|
||||||
|
DjrillDisableSenderView.as_view(), "djrill_disable_sender")
|
||||||
|
|||||||
@@ -89,7 +89,7 @@
|
|||||||
<td>{{ item }}</td>
|
<td>{{ item }}</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if result.is_enabled and result.approved_at %}
|
{% if result.is_enabled and result.approved_at %}
|
||||||
<td><button>disable</button></td>
|
<td><button data-url="{% url "admin:djrill_disable_sender" %}" data-email="{{ result.address }}">disable</button></td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td><button>enable</button></td>
|
<td><button>enable</button></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.http import HttpResponse, HttpResponseForbidden
|
||||||
from django.utils import simplejson as json
|
from django.utils import simplejson as json
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView, View
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import requests
|
import requests
|
||||||
@@ -60,3 +61,22 @@ class DjrillSendersListView(DjrillApiMixin, DjrillApiJsonObjectsMixin,
|
|||||||
def get(self, request):
|
def get(self, request):
|
||||||
objects = self.get_json_objects()
|
objects = self.get_json_objects()
|
||||||
return self.render_to_response({"objects": json.loads(objects)})
|
return self.render_to_response({"objects": json.loads(objects)})
|
||||||
|
|
||||||
|
|
||||||
|
class DjrillDisableSenderView(DjrillApiMixin, View):
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
email = request.POST.get("email", None)
|
||||||
|
|
||||||
|
if email:
|
||||||
|
payload = {
|
||||||
|
"key": self.api_key,
|
||||||
|
"email": email
|
||||||
|
}
|
||||||
|
req = requests.post("%s/users/disable-sender.json" % self.api_url,
|
||||||
|
data=json.dumps(payload))
|
||||||
|
|
||||||
|
if req.status_code == 200:
|
||||||
|
return HttpResponse("success")
|
||||||
|
|
||||||
|
return HttpResponseForbidden()
|
||||||
|
|||||||
Reference in New Issue
Block a user