auth.views.Loginview显示“ __init __()得到了意外的关键字参数'request'”

时间:2018-07-15 14:03:52

标签: django django-authentication

我正在尝试使用内置的<div class="row"> <div class="column"> <!-- Tab links --> <div class="tab"> <button class="tablinks" onclick="openDoc(event, 'Text')" id="defaultOpen">Testo</button> <button class="tablinks" onclick="openDoc(event, 'XML')">XML-DC</button> <button class="tablinks" onclick="openDoc(event, 'Download')">Download</button> </div> <!-- Tab content --> <div id="Text" class="tabcontent"> <h3>Giorno d'autunno</h3> <p>Signore: è tempo. Grande era l’arsura.<br> Deponi l’ombra sulle meridiane,<br> libera il vento sopra la pianura.<br></p> <p>Fa’ che sia colmo ancora il frutto estremo;<br> concedi ancora un giorno di tepore,<br> che il frutto giunga a maturare, e spremi<br> nel grave vino l’ultimo sapore.<br></p> <p>Chi non ha casa adesso, non l’avrà.<br> Chi è solo a lungo solo dovrà stare,<br> leggere nelle veglie, e lunghi fogli<br> scrivere, e incerto sulle vie tornare<br> dove nell’aria fluttuano le foglie.<br></p> </div> <div id="XML" class="tabcontent"> <textarea style="border: none;" rows="30" cols="120"> <?xml version="1.0" encoding="UTF-8"?> <poem xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:title>Giorno d'autunno</dc:title> <dc:creator>Rilke, Rainer Maria</dc:creator> <dc:date>1983</dc:date> <dc:subject>Rilke</dc:subject> <dc:subject>poesia tedesca</dc:subject> <dc:subject>simbolismo</dc:subject> <dc:subject>Dingeddicht</dc:subject> <dc:subject>soggettivismo</dc:subject> <dc:description>Poesia tratta dall'antologia "Poesie", Einaudi, 1983 Torino. Comprende le raccolte Libro delle immagini, Sonetti a Orfeo e Ultime poesie con due prose dai quaderni di Malte Laurids Brigge e versioni da H. Hesse e G. Trakl. Traduzione di Giaime Pintor.</dc:description> <dc:publisher>Giulio Einaudi Editore, 1983 Torino</dc:publisher> <dc:contributor n="1">Giaime Pintor</dc:contributor> <dc:contributor n="2">Carlo Teo Pedretti</dc:contributor> <dc:type>poem</dc:type> <dc:format>text/html</dc:format> <dc:identifier>SBN:CFI0656773 / ISBN:880617438X</dc:identifier> <dc:source>Poesie / Rainer Maria Rilke ; tradotte da Giaime Pintor con due prose dai quaderni di Malte Laurids Brigge e versioni di H. Hesse e G.Trakl. - 8. ed. - Torino : Einaudi, 1983. - 133 p. ; 19 cm. - (Collezione di poesia ; 32).</dc:source> <dc:language>it</dc:language> <dc:rights>Creative Commons "Attribuzione - Non commerciale - Condividi allo stesso modo 4.0 Internazionale"</dc:rights> </poem> </textarea> </div> <div id="Download" class="tabcontent"> <h3>Download</h3> <p>blablabla.</p> </div> </div> <div class="column"> <!-- Tab links --> <div class="tab"> <button class="collegamentitab" onclick="openProva(event, 'Lettura')" id="apriDefault">Commento</button> <button class="collegamentitab" onclick="openProva(event, 'Analisi')">Analisi</button> </div> <!-- Tab content --> <div id="Lettura" class="contenutotab"> <h3>Commento</h3> <p>blablabla.</p> </div> <div id="Analisi" class="contenutotab"> <h3>Analisi</h3> <p>blablabla.</p> </div> </div> </div> djangos,但显示错误:

LoginView

batchbook / user / urls.py

__init__() got an unexpected keyword argument 'request'

batchbook / batchbook / urls.py

from django.urls import path
from django.contrib.auth.views import LoginView, LogoutView
from django.shortcuts import reverse
from .forms import LoginForm

app_name = 'user'
urlpatterns = [
    path(
        'login',
        LoginView.as_view(
            authentication_form=LoginForm,
            success_url='/',
            template_name='user/login.html'),
        name='login'),
    path(
        'logout',
        LogoutView.as_view(template_name='user/logout.html'),
        name='logout'),
]

forms.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include(auth_urls)),
    re_path(
        '^$',
        TemplateView.as_view(template_name='site/index.html'),
        name='index'),
]

validators.py

from django import forms
from .validators import usn_validator

class LoginForm(forms.Form):
    usn = forms.CharField(
        max_length=11,
        validators = (usn_validator,),
        widget = forms.TextInput(attrs={
            'class': 'form-control'
        })
    )
    password = forms.CharField(
        widget=forms.PasswordInput(attrs={
            'class': 'form-control'
        })
    )

这是错误:

usn_validator = RegexValidator(
    regex='^1BM[0-9]{2}[A-Z]{2,3}[0-9]{3}$',
    message='Please enter correct USN',
    code='usn_err'
)

1 个答案:

答案 0 :(得分:2)

显然,LoginView使用djangos AuthenticationForm作为默认值。该表格的文档说:

  

request作为其第一个位置参数,...

这意味着LoginViewrequest作为参数传递给表单。 Django的默认forms.Form并不期望这样做(请查看源here)。

因此,您可以尝试覆盖__init__()方法以允许该额外参数:

class LoginForm(forms.Form):
    usn = forms.CharField...
    password = forms.CharField...

    def __init__(self, request, *args, **kwargs):
        # simply do not pass 'request' to the parent
        super().__init__(*args, **kwargs)

让我们知道怎么回事。