如何扩展Django AuthenticationForm

2024-10-03 21:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个web应用程序,我想在Django的AuthenticationForm中添加一个必需的复选框

我不知道如何扩展(或覆盖?)认证表单。

下面是我在模板中调用auth表单的地方:

<h2>Login</h2>
<form method="post">
   {% csrf_token %}
   {{ form.as_p}}
   <button type="submit" class="btn btn-success">Login</button>
 </form>
  <br>
 <p><strong>-- OR --</strong></p>
 <a href="{% url 'social:begin' 'github' %}">Login with GitHub</a><br>
</body>

这是我的网址.py公司名称:

^{pr2}$

这是我的视图.py,我还使用python social auth登录用户:

    @login_required
    def index(request):

        form = InfosForm(request.POST or None)

        if form.is_valid():

            #if request.user.is_authenticated:
            #    gituser = request.user.social_auth.filter(provider ='github-oauth2')
            #    extra_data = str(gituser.extra_data['access_token'])

            g = Github(gitkey)

            try:

                orga_name = form.cleaned_data['orga_name']
                org = g.get_organization(orga_name)
                repos = org.get_repos()
                reposList = []
                totalCommits = []
                #Transformation de la PaginatedList en liste classique pour manipuler   facilement les repos
                for repo in repos:
                    commitsList = repo.get_stats_participation().all
                    languages = repo.get_languages()
                    if not languages:
                        top_language = ''
                    else:
                        top_language = max(languages.keys(), key=(lambda key: languages[key]))
                    repository = Repository(titre=repo.name, starsgazers=repo.stargazers_count, top_language=top_language)
                    if len(commitsList) >= 2:
                        repository.commits_this_week = commits_this_week=commitsList[-1]
                        repository.commits_last_week = commits_last_week=commitsList[len(commitsList)-2]
                    reposList.append(repository)
                reposList.sort(key=lambda x: x.starsgazers, reverse=True)
                reposList = reposList[:10]
                #django jchart
                envoi = True

            except UnknownObjectException :
                erreur = True

        return render(request,'gitInsights/index.html', locals())

    def get_total_commits_last_week(reposList):

        totalCommits = []
        for repo in reposList:
            totalCommitsAllWeeks = repo.get_stats_participation().all
            totalCommits.append(totalCommitsAllWeeks[-1])

        return totalCommits

    @login_required
    def settings(request):
        user = request.user

        try:
            github_login = user.social_auth.get(provider='github')
        except UserSocialAuth.DoesNotExist:
            github_login = None

        can_disconnect = (user.social_auth.count() > 1 or user.has_usable_password())

        return render(request, 'settings.html', {
            'github_login': github_login,
            'can_disconnect': can_disconnect
        })

    @login_required
    def password(request):
        if request.user.has_usable_password():
            PasswordForm = PasswordChangeForm
        else:
            PasswordForm = AdminPasswordChangeForm

        if request.method == 'POST':
            form = PasswordForm(request.user, request.POST)
            if form.is_valid():
                form.save()
                update_session_auth_hash(request, form.user)
                messages.success(request, 'Your password was successfully updated!')
                return redirect('password')
            else:
                messages.error(request, 'Please correct the error below.')
        else:
            form = PasswordForm(request.user)
        return render(request, 'password.html', {'form': form})


    def informations_legales(request):
        return render(request, 'gitInsights/informations_legales.html')

提前谢谢!


Tags: formgithubauthgetreturnifrequestdef
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:57

您可以这样扩展authenticationform:

在表单.py公司名称:

class AuthenticationFormWithRequiredField(AuthenticationForm):
    required_checkbox = forms.BooleanField(required=True)

您可以检查值:

在视图.py公司名称:

^{pr2}$

您不必扩展LoginView-您可以在URL中使用pass ^{}: 网址.py公司名称:

from .forms import AuthenticationFormWithRequiredField

urlpatterns = [
    # ...
    path('login/', LoginView.as_view(template_name='login', authentication_form=AuthenticationFormWithRequiredField), name='login'),
]

相关问题 更多 >