首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用登录表单登录到django?有或没有Ajax

如何使用登录表单登录到django?有或没有Ajax
EN

Stack Overflow用户
提问于 2022-01-17 13:48:35
回答 1查看 250关注 0票数 0

问题:如果用户是loggedin,我想显示用户其他显示表单,当有效数据被提交时,登录用户并显示欢迎消息。

我试图传递的数据提交和更新的用户状态登录。我尝试了ajax和不使用ajax,但是用这两种方法我都想不出解决方案。你能帮我解释一下为什么失败吗?我怎么能解决这个问题呢?

HTML表单:

代码语言:javascript
复制
{% if user.is_authenticated %}
        <h5 class="title billing-title  ls-10 pt-1 pb-3 mb-0">
            Welcome {{ user.username }}!
        </h5>
        {% else%}
        <div class="login-toggle">
            Returning customer? <a href="#"
                class="show-login font-weight-bold text-uppercase text-dark">Login</a>
        </div>
        <form class="login-content" name="ajaxLogin" method="POST" action="{% url 'ecommerce:ajaxlogin' %}">
            {% csrf_token %}
            
            <p>If you have shopped with us before, please enter your details below. 
                If you are a new customer, please proceed to the Billing section.</p>
            <div class="row">
                <div class="col-xs-6">
                    <div class="form-group">
                        <label>Username or email *</label>
                        <input type="text" class="form-control form-control-md" name="username" id="id_email"
                            required>
                    </div>
                </div>
                <div class="col-xs-6">
                    <div class="form-group">
                        <label>Password *</label>
                        <input type="password" class="form-control form-control-md" name="password" id="id_password"
                            required>
                    </div>
                </div>
            </div>
            <div class="form-group checkbox">
                <input type="checkbox" class="custom-checkbox" id="remember" name="remember">
                <label for="remember" class="mb-0 lh-2">Remember me</label>
                <a href="#" class="ml-3">Lost your password?</a>
            </div>
            <button class="btn btn-rounded btn-login" type="submit" >Login</button>
        </form>
        {% endif%}

Views.py:

代码语言:javascript
复制
def ajaxlogin(request):
    is_ajax = request.headers.get('X-Requested-With') == 'XMLHttpRequest'
    if is_ajax and request.method == "POST":
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(user=username, password=password)
      if User.is_active and not None :
            login(request)
      else:
            pass             
         
    return render('./ecommerce/checkout.html')

AJAX:

代码语言:javascript
复制
   $(document).ready(function(){
    $('.login-content').on('submit', function(event){
      event.preventDefault();     
      var action_url = $(this).attr('action')
      
  
      $.ajax({
        url: action_url,
        type:"POST",                                                                                                                                                                                                              
        data: $('.login-content').serialize(),  
        headers: { "X-CSRFToken": $.cookie("csrftoken") },
        success: function (data) {
            console.log("login Successful");
            
        },
        
        
    });
  });
  });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-17 14:52:00

Django authenticate接受关键字参数usernamepassword作为默认情况,request作为可选参数。

在您的views.py中,您将user作为参数传递给身份验证,将其更改为username。如果用户处于活动状态,默认的authentication将返回None,因此如果使用默认身份验证,则不必检查is_active

views.py更改为

代码语言:javascript
复制
def ajaxlogin(request):
    is_ajax = request.headers.get('X-Requested-With') == 'XMLHttpRequest'
    if is_ajax and request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None :
            login(request, user)
        else:
            pass             
     
    return render('./ecommerce/checkout.html')

还可以将contentType设置为application/x-www-form-urlencoded,或者通过省略contentType键将其保留在默认位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70742430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档