Django权限系统auth模块用法解读
Django内置了一个强大的权限管理系统,可以通过auth模块方便地实现用户注册、登录、授权等功能。
用户注册
首先,在settings.py
文件中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '',
}
}
然后在urls.py
中添加用户注册的路由
from django.conf.urls import url
from django.contrib.auth.views import login
urlpatterns = [
# ...
url(r'^signup/$', signup, name='signup'),
url(r'^login/$', login, {'template_name': 'login.html'}, name='login'),
# ...
]
其中signup
是自定义的视图函数,用于处理用户注册的逻辑。代码如下:
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'signup.html', {'form': form})
用户登录
用户登录可以直接使用django.contrib.auth.views.login
视图函数,只需设置模板路径即可。在上面的路由配置中就已经设置了。
另外,可以通过login_required
装饰器限制某些视图只有在用户已经登录的情况下才能访问。
例如,以下视图函数只有在登录状态下才能访问:
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
# ...
用户权限控制
Django提供了一系列内置的权限控制函数,可以方便地控制用户在网站上的权限。例如,以下代码可以限制某个视图只有管理员才能访问:
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda user: user.is_superuser)
def my_view(request):
# ...
user_passes_test
函数将传入一个lambda表达式,这个lambda表达式用于返回当前用户是否具有某种权限的布尔值。在这个例子中,传入的lambda表达式使用了is_superuser
函数,判断当前用户是否是管理员。
我们还可以通过permission_required
装饰器限制某些视图只有具备某种权限的用户才能访问,例如:
from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote')
def my_view(request):
# ...
上述代码中,设置了一个权限名为polls.can_vote
,只有用户具有这个权限才能访问这个视图。
最后,可以通过User
模型提供的has_perm
方法检查用户是否具有某种权限。例如:
user = User.objects.get(username='admin')
if user.has_perm('polls.can_vote'):
# ...
上述代码中,检查admin
用户是否具有polls.can_vote
权限,如果具有则执行相应的逻辑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django权限系统auth模块用法解读 - Python技术站