Skip to content

Commit 0e3b897

Browse files
committed
增加设置登录验证函数方法和设置登录函数, 优化demo
1 parent d2286c2 commit 0e3b897

File tree

12 files changed

+68
-34
lines changed

12 files changed

+68
-34
lines changed

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ url(r'^adminlte/', include('adminlte.urls')),
3535
5 Look the examples in the code to see how to start.
3636

3737

38+
## Settings
39+
40+
### ADMINLTE_LOGIN_VIEW
41+
42+
adminlte login view. default is `adminlte.login`
43+
44+
### ADMINLTE_IS_LOGIN_FUNC
45+
46+
adminlte login validate method. if `required_login=False` will not validate login
47+
48+
3849
## Develop
3950

4051
```shell

adminlte/views.py renamed to adminlte/adminlte.py

+15-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.conf import settings
12
from django.contrib.auth import authenticate, login as django_login, logout as django_logout
23
from django.shortcuts import render, redirect
34

@@ -10,10 +11,21 @@ class IndexView(AdminLTEBaseView):
1011
menu = AdminMenu(name="Dashboard", description='Empty Dashboard page', icon_classes='fa-dashboard', sort=99999)
1112

1213

13-
def login(request):
14-
if request.method == 'GET':
14+
class LogoutView(AdminLTEBaseView):
15+
16+
def get(self, request, *args, **kwargs):
17+
django_logout(request)
18+
return redirect(getattr(settings, 'ADMINLTE_LOGIN_VIEW', 'adminlte.login'))
19+
20+
21+
class LoginView(AdminLTEBaseView):
22+
23+
login_required = False
24+
25+
def get(self, request, *args, **kwargs):
1526
return render(request, 'adminlte/login.html')
16-
else:
27+
28+
def post(self, request, *args, **kwargs):
1729
username = request.POST.get('username')
1830
password = request.POST.get('password')
1931
user = authenticate(username=username, password=password, type=1)
@@ -24,8 +36,3 @@ def login(request):
2436
})
2537
django_login(request, user)
2638
return redirect('adminlte.index')
27-
28-
29-
def logout(request):
30-
django_logout(request)
31-
return redirect('adminlte.login')

adminlte/urls.py

-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
from django.conf.urls import url
2-
3-
from . import views
41
from . import utils
52

63

74
urlpatterns = utils.AdminLTEBaseView.urlpatterns()
8-
9-
urlpatterns += [
10-
url(r'^login$', views.login, name='adminlte.login'),
11-
url(r'^logout$', views.logout, name='adminlte.logout'),
12-
]

adminlte/utils.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import math
22

3+
from django.conf import settings
34
from django.contrib.auth.models import AnonymousUser
45

56
try:
@@ -36,14 +37,22 @@ def active(self, view_name):
3637
class AdminLTEBaseView(View):
3738
template_name = 'adminlte/index.html'
3839

40+
login_required = True
41+
42+
@staticmethod
43+
def _default_is_login_func(request):
44+
return not isinstance(request.user, AnonymousUser) and request.user.is_staff
45+
3946
def dispatch(self, request, *args, **kwargs):
4047
# Try to dispatch to the right method; if a method doesn't exist,
4148
# defer to the error handler. Also defer to the error handler if the
4249
# request method isn't on the approved list.
4350

4451
if getattr(self, 'login_required', True):
45-
if not request.user.id or not request.user.is_staff:
46-
return redirect('adminlte.login')
52+
is_login = getattr(settings, 'ADMINLTE_IS_LOGIN_FUNC', self._default_is_login_func)
53+
login_view = getattr(settings, 'ADMINLTE_LOGIN_VIEW', 'adminlte.login')
54+
if not is_login(request):
55+
return redirect(login_view)
4756

4857
if request.method.lower() in self.http_method_names:
4958
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)

exmaples/demo/demo/urls.py

-5
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@
1414
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
1515
"""
1616
from django.conf.urls import url, include
17-
from django.contrib import admin
18-
19-
from page import views
2017

2118
urlpatterns = [
22-
url(r'^admin/', admin.site.urls),
2319
url(r'^adminlte/', include('adminlte.urls')),
24-
url(r'^pages/(?P<page_id>[0-9]+)/$', views.pages, name='adminlte.example.pages'),
2520
]

exmaples/demo/page/views.py renamed to exmaples/demo/page/adminlte.py

+13-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
class ExampleView(AdminLTEBaseView):
12-
template_name = 'adminlte/example.html'
12+
template_name = 'example.html'
1313

1414
menu = AdminMenu(name="样例", description='这是一个测试页面', icon_classes='fa-code')
1515

@@ -21,7 +21,7 @@ def get(self, request, *args, **kwargs):
2121

2222

2323
class ExamplePagesView(AdminLTEBaseView):
24-
template_name = 'adminlte/pages/index.html'
24+
template_name = 'pages/index.html'
2525

2626
menu = AdminMenu(name="富文本列表", parent_menu=page_manager)
2727

@@ -35,7 +35,7 @@ def get(self, request, *args, **kwargs):
3535

3636

3737
class ExamplePagesCreateView(AdminLTEBaseView):
38-
template_name = 'adminlte/pages/edit.html'
38+
template_name = 'pages/edit.html'
3939

4040
menu = AdminMenu(name="新页面", parent_menu=page_manager)
4141

@@ -51,7 +51,7 @@ def post(self, request, *args, **kwargs):
5151

5252

5353
class ExamplePageEditView(AdminLTEBaseView):
54-
template_name = 'adminlte/pages/edit.html'
54+
template_name = 'pages/edit.html'
5555

5656
_regex_name = 'pages/(?P<page_id>[0-9]+)/edit'
5757

@@ -75,8 +75,12 @@ def post(self, request, page_id, *args, **kwargs):
7575
return render(request, self.template_name)
7676

7777

78-
def pages(request, page_id):
79-
page = Page.objects.get(pk=page_id)
80-
return render_to_response('adminlte/page.html', context={
81-
"page": page
82-
})
78+
class PagesView(AdminLTEBaseView):
79+
80+
_regex_name = 'pages/(?P<page_id>[0-9]+)'
81+
82+
def get(self, request, page_id, *args, **kwargs):
83+
page = Page.objects.get(pk=page_id)
84+
return render_to_response('page.html', context={
85+
"page": page
86+
})

adminlte/templates/adminlte/pages/index.html renamed to exmaples/demo/page/templates/pages/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
{% for page in pager.items %}
1313
<tr>
1414
<td>{{ forloop.counter }}</td>
15-
<td><a target="_blank" href="{% url 'adminlte.example.pages' page_id=page.id %}">{{ page.title }}</a></td>
15+
<td><a target="_blank" href="{% url 'adminlte.pages' page_id=page.id %}">{{ page.title }}</a></td>
1616
<td><a href="{% url 'adminlte.example.page.edit' page_id=page.id %}">编辑</a></td>
1717
</tr>
1818
{% endfor %}

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name='django-adminlte-admin',
9-
version='0.2.2',
9+
version='0.3.0',
1010
packages=find_packages(),
1111
include_package_data=True,
1212
license='MIT License',

tests/tests.py

+16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22

3+
from django.conf import settings
34
from django.contrib.auth.models import AnonymousUser, User
45
from django.test import RequestFactory
56
from django.test import TestCase
@@ -50,3 +51,18 @@ def test_index_view(self):
5051

5152
response = IndexView.as_view()(request)
5253
self.assertEqual(response.status_code, 200)
54+
55+
def test_setting_login_method(self):
56+
"""
57+
test change is login validate method
58+
"""
59+
60+
def is_login(request):
61+
return isinstance(request.user, AnonymousUser)
62+
settings.ADMINLTE_IS_LOGIN_FUNC = is_login
63+
request = self.factory.get('/adminlte/index')
64+
65+
request.user = AnonymousUser()
66+
67+
response = IndexView.as_view()(request)
68+
self.assertEqual(response.status_code, 200)

0 commit comments

Comments
 (0)