Created
November 13, 2011 23:54
-
-
Save herberthamaral/1362936 to your computer and use it in GitHub Desktop.
Exemplo de uso de decorators na vida real utilizando views no django
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import fudge | |
from django.test import TestCase | |
from django.contrib.auth.models import User | |
from django.http import Http404 | |
import views | |
def stub(name = 'stub'): | |
return fudge.Fake(name).is_a_stub() | |
class AuthTest(TestCase): | |
def setUp(self): | |
self.user = User() | |
self.user.username = 'root' | |
self.user.set_password('123') | |
self.user.is_staff = True | |
self.user.is_superuser = True | |
self.user.save() | |
def test_auth_should_not_pass_through_when_user_is_inside_local_network(self): | |
request = stub('request') | |
request.REMOTE_ADDR = '10.0.0.1' | |
self.assertFalse(views.user_should_pass(request)) | |
def test_auth_should_pass_through_when_user_is_inside_local_network(self): | |
request = stub('request') | |
request.REMOTE_ADDR = '192.168.0.1' | |
self.assertTrue(views.user_should_pass(request)) | |
def test_user_should_pass_to_index_page_if_it_is_inside_the_network(self): | |
request = stub('request') | |
request.REMOTE_ADDR = '192.168.0.1' | |
views.root_login = stub().is_callable() | |
try: | |
views.index(request) | |
except Http404: | |
self.fail('User deveria passar') | |
def test_user_should_not_pass_to_index_page_if_it_isnt_inside_the_network(self): | |
request = stub('request') | |
request.REMOTE_ADDR = '10.0.0.1' | |
request.session = [] | |
views.root_login = stub().is_callable() | |
try: | |
views.index(request) | |
self.fail('User nao deveria passar') | |
except Http404: | |
pass |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.http import Http404, HttpResponse | |
from django.contrib.auth.models import User | |
from django.contrib.auth import login | |
def user_should_pass(request): | |
return request.REMOTE_ADDR.startswith('192.168.0') | |
def pass_if_it_is_inside_network(the_view): | |
def decorated(request, *args, **kwargs): | |
if user_should_pass(request): | |
root_login(request) | |
return the_view(request) | |
else: | |
raise Http404 | |
return decorated | |
def root_login(request): | |
user = User.objects.filter(username = 'root')[0] | |
login(request, user) | |
@pass_if_it_is_inside_network | |
def index(request): | |
return HttpResponse('You are in! Welcome root!') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment