if request.method == 'POST': username = request.form['username'] password = request.form['password'] if not username or not password: session['tip']='请输入账号密码' return redirect(url_for('login')) data = select_all(f'select * from admin_table WHERE username=\'{username}\'',None) # 验证用户名和密码是否一致 if len(data)<1: session['tip'] = '用户账号有误' return redirect(url_for('login')) elif username == data[0]['username'] and password == data[0]['password']: # print('Login success.') session['username'] = username session.permanent = True # return render_template("index.html") return redirect(url_for('tupu')) else: session['tip'] = '用户密码有误' return redirect(url_for('login'))分析一下
时间: 2024-02-14 19:24:04 浏览: 138
这段代码是一个登录页面的后端处理函数,主要的流程是:当用户提交登录表单时,首先获取表单中用户输入的用户名和密码,然后进行验证。如果用户名或密码为空,则返回登录页面并提示用户输入账号密码。如果用户名不存在,则返回登录页面并提示用户账号有误。如果用户名和密码都正确,则将用户名存储在 session 中,并进行永久性设置,然后将用户重定向到名为 'tupu' 的视图函数所对应的页面。如果密码错误,则返回登录页面并提示用户密码有误。
其中,session 是 Flask 中的会话对象,可以用于存储用户的会话数据,并且可以设置会话的过期时间等属性。url_for 函数可以根据视图函数的名称生成对应的 URL 地址,redirect 函数可以将用户重定向到指定的 URL 地址。select_all 函数可能是一个数据库查询函数,用于查询数据库中符合条件的数据。
相关问题
def klogin(request): if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'] password = form.cleaned_data['password'] print(username) print(password) user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('/backApp/kindex/') else: form.add_error(None, '用户名或密码错误') else: form = LoginForm() print(111) return render(request, 'klogin.html', {'form': form})后端视图函数如上所示,前端点击登陆后刷新界面未跳转指定界面,成功解决方法
可以尝试修改代码如下:
```python
from django.urls import reverse
def klogin(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect(reverse('backApp:kindex'))
else:
form.add_error(None, '用户名或密码错误')
else:
form = LoginForm()
return render(request, 'klogin.html', {'form': form})
```
主要修改是在成功登陆后使用 `reverse` 函数获取到指定视图的 URL,然后通过 `redirect` 函数进行跳转。同时,对代码进行了一些格式上的调整,使其更加清晰易读。
def register_view(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): password1 = form.cleaned_data.get('password1') password2 = form.cleaned_data.get('password2') if password1 != password2: messages.error(request, "两次密码输入不一致,请重新输入") return render(request, 'register.html', {'form': form}) form.save() messages.success(request, "注册成功") return redirect('login') else: form = UserCreationForm() return render(request, 'register.html', {'form': form}) 两次密码不一致仍然注册了是为什么
如果您使用的是以上代码,并且在注册时两次密码不一致时仍然可以注册成功,可能是因为表单验证出现了问题。在这种情况下,您可以尝试使用表单验证器来解决问题。
表单验证器是 Django 中用于验证表单数据的一种机制。您可以在表单中添加自定义验证器,以确保表单数据符合您的要求。在本例中,我们可以添加一个自定义验证器,以确保密码输入框中输入的密码相同。
以下是示例代码:
```python
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class CustomUserCreationForm(UserCreationForm):
password2 = forms.CharField(label='确认密码', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'password1', 'password2', 'email']
def clean(self):
cleaned_data = super().clean()
password1 = cleaned_data.get('password1')
password2 = cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise forms.ValidationError("两次密码输入不一致,请重新输入")
return cleaned_data
```
在上面的代码中,我们创建了一个自定义表单类 CustomUserCreationForm,并添加了一个 password2 字段,用于确认密码。我们还覆盖了 clean() 方法,以确保 password1 和 password2 字段相同。如果它们不同,我们会引发一个表单验证错误。
在视图函数中,我们使用 CustomUserCreationForm 表单类代替 UserCreationForm 表单类,以便在表单验证时使用我们的自定义验证器。这样,如果密码输入框中输入的密码不相同,表单验证会失败,并显示一个错误消息。
希望这可以帮助您解决您的问题!
阅读全文