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.
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, HttpResponse |
|
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/ |
|
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_ |
|
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_ |
|
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 |
) |
