下面是我针对“django 简单实现登录验证”的攻略,分两个示例逐步说明如下。
示例一
- 首先,在基于 Django 创建的网站的项目文件夹下,创建一个新的应用(App)。在终端里输入以下命令:
bash
python manage.py startapp accounts
这将在你的项目文件夹下创建一个名为 accounts
的应用。
- 在
accounts
应用下创建一个名为forms.py
的文件,用于存放表单类。在forms.py
中,定义一个登录表单。具体代码如下:
```python
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
```
这里我们定义了一个名为 LoginForm
的表单类,包含了两个字段:username
和 password
。
- 接下来,在
views.py
文件中编写视图函数。在这个例子中,我们可以使用 Django 内置的LoginView
类来实现登录视图,并将LoginForm
表单类与它关联起来。具体代码如下:
```python
from django.contrib.auth.views import LoginView
from .forms import LoginForm
class CustomLoginView(LoginView):
template_name = 'accounts/login.html'
authentication_form = LoginForm
redirect_authenticated_user = True
```
在这里,我们创建了一个名为 CustomLoginView
的类,并继承了 Django 内置的 LoginView
类。我们定义了三个属性:
template_name
: 指定登录页面的模板文件路径;authentication_form
: 指定登录表单采用的自定义表单类;-
redirect_authenticated_user
: 指定已认证用户要重定向到哪里。如果将其设置为 True,则已认证用户在访问登录页时将被重定向到主页。 -
接下来,在
accounts
应用下创建一个名为urls.py
的文件,并且将 URL 映射到我们在CustomLoginView
中定义的视图函数上。具体代码如下:
```python
from django.urls import path
from .views import CustomLoginView
urlpatterns = [
path('login/', CustomLoginView.as_view(), name='login'),
]
```
这样,我们就可以在网站中用户访问 /accounts/login/
时,会调用 CustomLoginView
视图并显示登录页面了。
- 最后,在模板文件
accounts/login.html
中编写登录页面的 HTML 代码,并将表单类LoginForm
中定义的字段与 HTML 表单元素关联起来。具体代码如下:
```html
Login
```
这里我们使用了 Django 模板语言来生成 HTML 页面,作为登录页面。其中,{% csrf_token %}
用于添加实现 CSRF 保护的隐藏表单,可以有效防止跨站请求伪造攻击。
至此,我们已经通过 Django 应用内置的视图和表单类,成功实现了一个简单的登录验证功能。
示例二
在上面的示例中,我们使用 Django 自带的 LoginView
视图类来实现了登录验证。除此之外,我们还可以通过编写自己的视图函数来实现登录验证。下面是用自定义视图函数实现登录的过程:
- 在
accounts/forms.py
中,定义登录表单。具体代码如下:
```python
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
```
- 在
accounts/views.py
中,定义登录视图函数login_view
。首先,需要导入auth
模块,以及刚刚定义的LoginForm
表单类。具体代码如下:
```python
from django.contrib import auth
from django.shortcuts import render, redirect
from .forms import LoginForm
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return redirect('home')
else:
form = LoginForm()
return render(request, 'accounts/login.html', { 'form': form })
```
在这里,我们编写了一个名为 login_view
的视图函数。当用户提交登录表单时,会创建一个 LoginForm
表单实例,并进行验证。如果表单验证通过,我们会试着使用 auth.authenticate()
方法验证用户凭据。如果认证通过,我们将使用 auth.login()
函数进行用户登录,并将用户重定向至主页。如果表单验证未通过,则继续在登录页面呈现已经输入的表单数据和错误信息。
- 在
accounts/urls.py
中,将路由指向定义好的视图函数。具体代码如下:
```python
from django.urls import path
from .views import login_view
urlpatterns = [
path('login/', login_view, name='login'),
]
```
- 最后,在模板文件
accounts/login.html
中编写登录页面的 HTML 代码,并将表单类LoginForm
中定义的字段与 HTML 表单元素关联起来。具体代码与示例一相同。
这样,我们就实现了基于自定义视图函数的登录验证功能。两个示例的实现方式略有不同,但是都有效地实现了登录验证的需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django 简单实现登录验证给你 - Python技术站