亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在我自己的視圖中使用 LoginView 并在 HTML 模板中顯示?

如何在我自己的視圖中使用 LoginView 并在 HTML 模板中顯示?

jeck貓 2023-09-26 16:19:35
我想使用現成的 Django LoginView,但同時我必須使用我自己的視圖在同一個 HTML 模板中注冊。如果在 urls.py 文件中我將連接 2 個視圖,那么我只會首先連接。所以我的問題是如何在我自己的視圖中使用 LoginView 并使用 jinja 的 2 個表單?這是我的views.py 文件和html ;)def index(request):    if request.method == 'POST':        form = UserRegisterForm(request.POST)        formlog = auth_views.LoginView.as_view(template_name='main/index.html')        if 'signup' in request.POST:            if form.is_valid():                form.supervalid()                form.save()                username = form.cleaned_data.get('username')                messages.success(request, f'Dear {username} you have been created a new accound!')                return redirect('main')        elif 'login' in request.POST:            if formlog.is_valid():                formlog.save()                username = form.cleaned_data.get('username')                messages.success(request, f'Your account has been created! You are now able to log in')                return redirect('main')    else:        form = UserRegisterForm()        formlog = auth_views.LoginView.as_view(template_name='main/index.html')    return render(request, 'main/index.html', {'form': form, 'formlog': formlog})# this code is not working , but not returning any errors超文本標記語言{% if not user.is_authenticated %}    <!-- Login -->    <div class="container">        <div class="log-1">            <div class="log-0">                <p class="logtitle">BareTalk</p>                <form method="POST" name="login">                    {% csrf_token %}                    {{ formlog|crispy }}                    <button class="log-button first" type="submit">Login</button>                </form>                <button class="log-button second"                     onclick="modalwindowops.open();" id="signup">Sign Up</button>            </div>        </div>    </div>
查看完整描述

1 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

if 'signup' in request.POST:都不會elif 'login' in request.POST:在您的視圖中觸發index(),因為您的 HTML 表單實際上并不包含這些輸入。請注意,該name元素已棄用該<form>屬性。

相反,您可以在表單<input>?添加隱藏的內容,如下所示:

<form method="POST">

? ? {% csrf_token %}

? ? {{ formlog|crispy }}

? ? <input type="hidden" name="login" value="true" />

? ? <button class="log-button first" type="submit">Login</button>

</form>

還,


formlog = auth_views.LoginView.as_view(template_name='main/index.html')

將視圖保存到formlog,而不是表單,因此調用formlog.is_valid()將導致錯誤。


代替


elif 'login' in request.POST:

? ? if formlog.is_valid():

? ? ? ? formlog.save()

? ? ? ? username = form.cleaned_data.get('username')

? ? ? ? messages.success(request, f'Your account has been created! You are now able to log in')

? ? ? ? return redirect('main')

你可能只需要做


elif 'login' in request.POST:

? ? log_view = auth_views.LoginView.as_view(template_name='main/index.html')

? ? log_view(request)

調用is_valid()、save()、 以及進行重定向都已完成LoginView。如果您仍想進行自定義,message.success()則必須重寫一個或多個方法LoginView,但這是另一個主題。


更新:

您還需要將視圖中的這一行:(formlog = auth_views.LoginView.as_view(template_name='main/index.html')之前return render...)更改為:


formlog = AuthenticationForm(request)

將此線引至街區外else。


還要在您的頂部添加表單的導入views.py:


from django.contrib.auth.forms import AuthenticationForm

需要進行此更改,因為模板需要表單對象(默認情況AuthenticationForm下LoginView)而不是視圖對象。更新后的視圖函數將如下所示:


from django.contrib.auth.forms import AuthenticationForm


def index(request):

? ? if request.method == 'POST':

? ? ? ? form = UserRegisterForm(request.POST)

? ? ? ? if 'signup' in request.POST:

? ? ? ? ? ? if form.is_valid():

? ? ? ? ? ? ? ? form.supervalid()

? ? ? ? ? ? ? ? form.save()

? ? ? ? ? ? ? ? username = form.cleaned_data.get('username')

? ? ? ? ? ? ? ? messages.success(request, f'Dear {username} you have been created a new accound!')

? ? ? ? ? ? ? ? return redirect('main')

? ? ? ? elif 'login' in request.POST:

? ? ? ? ? ? log_view = auth_views.LoginView.as_view(template_name='main/index.html')

? ? ? ? ? ? log_view(request)

? ? else:

? ? ? ? form = UserRegisterForm()

? ? formlog = AuthenticationForm(request)

? ? return render(request, 'main/index.html', {'form': form, 'formlog': formlog})

請注意,這可以通過在登錄憑據無效時提供反饋來改進。事實上,如果提供的憑據不起作用,此更新的代碼只會重新加載空白登錄表單。


查看完整回答
反對 回復 2023-09-26
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號