david / django-modelviews

Backup of an old repository with useful ideas. Initial goal: integrating REST to django admin (class-based views).

Clone this repository (size: 85.8 KB): HTTPS / SSH
$ hg clone http://code.welldev.org/django-modelviews
commit 32: e608ece7917f
parent 31: be8c4ff20004
parent 22: 8b382746c1d3
branch: default
Merged in changes from head.
Will Larson
2 years ago

Changed (Δ1.7 KB):

raw changeset »

generic/rest_views.py (2 lines added, 1 lines removed)

tests/test_modelview/tests.py (30 lines added, 3 lines removed)

tests/urls.py (6 lines added, 4 lines removed)

Up to file-list generic/rest_views.py:

1
1
from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
2
from django.http import Http404, HttpResponse, HttpResponseNotAllowed
2
from django.http import Http404, HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed
3
3
from django.template import loader, RequestContext
4
4
from django.shortcuts import render_to_response
5
5
from django.core.xheaders import populate_xheaders
6
6
from django.core.serializers import serialize
7
from django.newforms.models import ModelFormMetaclass, ModelForm
7
8
8
9
try:
9
10
    from django.views.generic.base import BaseDetailView

Up to file-list tests/test_modelview/tests.py:

@@ -24,7 +24,9 @@ class ModelViewTest(TestCase):
24
24
        all other http methods.
25
25
        """
26
26
        a = Article.objects.all()[0]
27
        response = self.client.post('/articles/%s/' % a.slug)
27
        response = self.client.post('/articles/', {'name': "Not allowed article",
28
                                                   'slug': "not-allowed-article",
29
                                                   'body': "some not allowed text"})
28
30
        self.assertEqual(response.status_code, 405)
29
31
        # no explicit way to send DELETE or PUT methods, so get
30
32
        # a bit sneaky here.
@@ -40,20 +42,45 @@ class ModelViewTest(TestCase):
40
42
        response = self.client.get('/articles/%s/' % a.slug)
41
43
        self.assertEqual(response.status_code, 200)
42
44
43
    def test_html_responder_detail(self):
45
    def test_html_responder_read_detail(self):
44
46
        a = Article.objects.all()[0]
45
47
        response = self.client.get('/articles/%s/html/' % a.slug)
46
48
        self.assertEqual(response.status_code, 200)
47
49
        self.assertTemplateUsed(response, 'test_modelview/article_detail.html')
48
50
        self.assertNotEqual(response.content.find(a.name), -1)
49
51
50
    def test_html_responder_list(self):
52
    def test_html_responder_read_list(self):
51
53
        response = self.client.get('/articles/')
52
54
        self.assertEqual(response.status_code, 200)
53
55
        self.assertTemplateUsed(response, 'test_modelview/article_list.html')
54
56
        for article in Article.objects.all():
55
57
            self.assertNotEqual(response.content.find(article.name),-1)
56
58
59
    def test_html_responder_create(self):
60
        response = self.client.post('/rw-articles/', {'name': "Another article",
61
                                                      'slug': "another-article",
62
                                                      'body': "some other text"})
63
        self.assertEqual(response.status_code, 302)
64
        self.assertEqual(Article.objects.count(), 2)
65
66
    def test_html_responder_update(self):
67
        a = Article.objects.all()[0]
68
        response = self.client.post('/rw-articles/%s/' % a.slug,
69
                                    {'name': "An updated article",
70
                                     'slug': "an-article",
71
                                     'body': "some text"},
72
                                     REQUEST_METHOD='PUT')
73
        self.assertEqual(response.status_code, 302)
74
        self.assertEqual(Article.objects.count(), 1)
75
        self.assertEqual(Article.objects.all()[0].name, u'An updated article')
76
77
    def test_html_responder_delete(self):
78
        a = Article.objects.all()[0]
79
        response = self.client.post('/rw-articles/%s/' % a.slug,
80
                                     REQUEST_METHOD='DELETE')
81
        self.assertEqual(response.status_code, 302)
82
        self.assertEqual(Article.objects.count(), 0)
83
57
84
    def test_json_responder_detail(self):
58
85
        a = Article.objects.all()[0]
59
86
        response = self.client.get('/articles/%s/json/' % a.slug)

Up to file-list tests/urls.py:

@@ -6,9 +6,11 @@ from django_modelview.generic.rest_views
6
6
articles = ModelView(Article.objects.all(),
7
7
                     responders=(HtmlResponder,JsonResponder,XmlResponder),
8
8
                     methods=('GET',))
9
rw_articles = ModelView(Article.objects.all(),
10
                        responders=(HtmlResponder,),
11
                        methods=('GET', 'POST', 'PUT', 'DELETE'))
9
12
                     
10
urlpatterns = patterns(
11
    '',
12
    ('^articles/(?P<slug>[-\w]*)/(?P<format>(html|json|xml))?/?$',
13
     articles),
13
urlpatterns = patterns('',
14
    ('^articles/(?P<slug>[-\w]+)?/?(?P<format>(html|json))?/?$', articles),
15
    ('^rw-articles/(?P<slug>[-\w]+)?/?$', rw_articles),
14
16
)