这段代码中的urlresolvers和 reverse_lazy有下划线:from django.core.urlresolvers import reverse_lazy
时间: 2024-05-20 08:17:57 浏览: 8
这是因为在 Django 1.9 以前的版本中,urlresolvers 和 reverse_lazy 是常用的函数和类,在函数和类名称中使用下划线是为了防止与 Python 中的关键字或内置函数冲突。从 Django 2.0 开始,这些函数和类被移到了 django.urls 模块中,不再使用下划线。
相关问题
reverse_lazy()
reverse_lazy()是Django中的一个函数,用于生成URL的逆向解析。它与reverse()函数非常相似,但它返回一个lazy object,这意味着它只有在需要时才会被计算,而不是立即计算。这对于需要延迟计算的情况非常有用,例如在模板中使用URL或需要在请求处理期间生成URL的情况。通常,我们可以在视图函数中使用reverse_lazy()来生成重定向的URL。例如:
```python
from django.urls import reverse_lazy
from django.shortcuts import redirect
def my_view(request):
# some logic
return redirect(reverse_lazy('app_name:view_name'))
```
在模板中使用reverse_lazy(),可以使用{% url %}标签。例如:
```html
<a href="{% url 'app_name:view_name' %}">Link</a>
```
Django中dologin 三者登陆代码
在 Django 中,有三种常用的登录方式:基于函数视图、基于类视图和基于 Django 内置的认证视图。
基于函数视图的登录:
```python
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
error_msg = 'Invalid username or password!'
else:
error_msg = ''
return render(request, 'login.html', {'error_msg': error_msg})
```
基于类视图的登录:
```python
from django.contrib.auth import authenticate, login
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
class CustomLoginView(LoginView):
template_name = 'login.html'
success_url = reverse_lazy('home')
def form_valid(self, form):
remember_me = form.cleaned_data.get('remember_me')
if not remember_me:
self.request.session.set_expiry(0)
return super().form_valid(form)
```
基于 Django 内置的认证视图:
```python
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
class CustomLoginView(LoginView):
template_name = 'login.html'
success_url = reverse_lazy('home')
```
其中,基于 Django 内置的认证视图是最为简单和快捷的方式,但是如果需要自定义一些登录逻辑,可以选择基于函数视图或基于类视图实现。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)