用户无法通过输入任何页面的url进入任何页面 我是否需要更改设置中的任何内容.py
我没有使用 django 内置身份验证进行登录。
view.py 用于登录每个仪表板,
def asset_login(request):
if request.method == 'POST':
username = request.POST.get('user_id')
password = request.POST.get('password')
try:
user = UserTable.objects.get(username=username, password=password)
if user:
if user.status == 'inactive':
messages.error(request, 'Your account is inactive.')
return redirect('asset_login')
request.session['name'] = user.name
request.session['role'] =user.role
if user.role == 'admin':
return redirect('admin_dashboard')
elif user.role == 'ciso':
return redirect('ciso_dashboard')
elif user.role == 'fnhead':
return redirect('fnhead_dashboard')
elif user.role == 'systemadmin':
return redirect('systemadmin_dashboard')
elif user.role == 'assetowner':
return redirect('assetowner_dashboard')
else:
messages.error(request, 'Unknown user position')
return redirect('asset_login') # Redirect to clear form and message
except UserTable.DoesNotExist:
messages.error(request, 'Invalid username or password')
return redirect('asset_login') # Redirect to clear form and message
return render(request, 'asset.html')
urls.py
urlpatterns = [
path('asset_login/', views.asset_login, name='asset_login'),
path('admins/', views.admin_dashboard, name='admin_dashboard'),
path('assetdb/', views.assetowner_dashboard, name='assetowner_dashboard'),
view.py 用于仪表板
def admin_dashboard(request):
total_users = UserTable.objects.count()
total_assets = AssetTable.objects.count()
total_dept=Department.objects.count()
total_emp=Employee.objects.count()
name = request.session.get('name',None)
role = request.session.get('role', None)
try:
admin_privileges = adminprivileges.objects.get()
except ObjectDoesNotExist:
admin_privileges = None
context = {
'total_users': total_users,
'total_assets': total_assets,
'total_dept':total_dept,
'total_emp':total_emp,
'name':name,
'role':role,
'assetview': admin_privileges.assetview if admin_privileges else False,
'userview': admin_privileges.userview if admin_privileges else False,
'employeeview': admin_privileges.employeeview if admin_privileges else False,
'locationview': admin_privileges.locationview if admin_privileges else False,
'departmentview': admin_privileges.departmentview if admin_privileges else False,
'categoryview': admin_privileges.categoryview if admin_privileges else False,
'rolesview': admin_privileges.rolesview if admin_privileges else False,
'reportview': admin_privileges.reportview if admin_privileges else False,
'previlegeedit':admin_privileges.privilegeedit if admin_privileges else False,
}
return render(request, 'admin_dashboard.html', context)
用户无法通过输入任何页面的 url 来进入任何页面。
我需要更改设置 .py 中的任何内容吗
可以通过创建自己的装饰器函数,在的 Django 项目中使用
login_required
功能,即使没有使用 Django 的内置身份验证系统。以下是如何操作的方法:
1. 创建一个装饰器函数:
此函数将检查用户是否已登录。如果已登录,则允许访问该视图;否则,则会将其重定向到登录页面。
from django.shortcuts import redirect
def login_required(view_func):
def wrapper_function(request, *args, **kwargs):
if 'name' in request.session: # 检查用户名是否在 session 中
return view_func(request, *args, **kwargs)
else:
return redirect('asset_login') # 将用户重定向到的登录页面
return wrapper_function
2. 将装饰器应用于的视图:
使用
@login_required
装饰器来装饰需要登录的任何视图函数。
from django.shortcuts import render
from .decorators import login_required
@login_required
def admin_dashboard(request):
total_users = UserTable.objects.count()
# ...(的视图代码的其余部分)
return render(request, 'admin_dashboard.html', context)
@login_required
def assetowner_dashboard(request):
# ...(的视图代码)
return render(request, 'assetowner_dashboard.html')
说明:
-
该装饰器函数
login_required
检查request.session
中是否存在name
键。这是基于的代码,在登录时将name
存储在 session 中。 - 如果用户已登录,则装饰器将允许访问原始视图函数。
-
如果用户未登录,装饰器将把用户重定向到的登录页面(在本例中为
asset_login
)。
在 settings.py 中不需要进行任何更改 ,因为没有使用 Django 的内置身份验证系统。
通过使用此方法,可以保护的视图,并确保只有登录用户才能访问它们。
标签:python,django,login-required From: 78805776