gpt4 book ai didi

Django:登录用户并在同一页面上刷新而不定义模板?

转载 作者:行者123 更新时间:2023-12-04 04:49:34 25 4
gpt4 key购买 nike

我正在尝试使用 bootstrap 下拉登录表单让用户登录。我可以硬编码我的用户名和密码并进行身份验证,但我试图让用户登录而不进入登录屏幕。这是我的代码:

模板:
我使用 action 调用 logUserIn url,以便表单可以发布到该 View 。

<ul class="nav pull-right">
{% if user.is_authenticated %}
<li><a> Welcome {{ user.first_name }} </a></li>
<li class="divider-vertical"></li>
<li><a href="{% url 'caesarWorkflowApp.views.logUserOut' %}">Log Out</a></li>
<li class="divider-vertical"></li>
{% else %}
<li class="dropdown">
<a class="dropdown-toggle" href="#" data-toggle="dropdown">Sign In <strong class="caret"></strong></a>
<div class="dropdown-menu" style="padding: 15px; padding-bottom: 0px;">
<form action="{% url 'caesarWorkflowApp.views.logUserIn' %}" method="post" accept-charset="UTF-8">
{% csrf_token %}
<input id="user_username" style="margin-bottom: 15px;" type="text" name="username" placeholder="Username" size="30" />
<input id="user_password" style="margin-bottom: 15px;" type="password" name="password" placeholder="Password" size="30" />
<input id="user_remember_me" style="float: left; margin-right: 10px;" type="checkbox" name="user[remember_me]" value="1" />
<label class="string optional" for="user_remember_me"> Remember me</label>
<input class="btn btn-primary" style="clear: left; width: 100%; height: 32px; font-size: 13px;" type="submit" name="commit" value="Sign In" />
</form>
</div>
</li>
{% endif %}
<li class="divider-vertical"></li>
</ul>

enter image description here

网址:
urlpatterns = patterns('',
url(r'^$', 'caesarWorkflowApp.views.home', name='default'),
url(r'^$', 'caesarWorkflowApp.views.logUserIn'),
url(r'^$', 'caesarWorkflowApp.views.logUserOut'),
)

意见:
然后我有这个登录 View ,它不起作用,因为即使表单成功发布,控制台也不会打印“输入”。我发错了吗?调用错误的操作? 有谁知道如何在不为其创建模板的情况下创建登录/注销 View ,以便它只是刷新/重定向到主页?
def logUserIn(request):
if request.method == 'POST':
print 'enter'
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
# the password verified for the user
if user.is_active:
login(request, user)
print("User is valid, active and authenticated")

else:
print("The password is valid, but the account has been disabled!")
else:
# the authentication system was unable to verify the username and password
print("The username and password were incorrect.")

response = render_to_response('home.html', {}, context_instance=RequestContext(request))
return response

我还希望页面不要问我是否要重新加载,因为它是发布表单,我相信这是万一有人对此感兴趣的解决方案: Stop browsers asking to resend form data on refresh?

谢谢!

最佳答案

您正在寻找的是所谓的 AJAX。我一直用 jQuery处理 AJAX 请求,因为它使工作更容易。

这是我通常的处理方式:

  • 创建 ajax Django 项目中的应用程序,以使我的 AJAX View 和 URL 远离我的其余代码(此外,我喜欢重复使用我的应用程序。从一个项目到另一个项目)
  • ajax 中编写 AJAX View 及其 URL申请
  • 使用 jQuery 将 AJAX 请求应用到我的表单

  • 模板

    <form id="form-login" action="" method="post">
    {% csrf_token %}
    <!-- Put your form here -->
    <button type="submit">submit</button>
    </form>

    JavaScript

    $(document).ready(function() {
    $("#form-login").submit(function() {
    jQuery.ajax({
    "data": $(this).serialize(),
    "type": $(this).attr("method"),
    "url": "{% url 'login-submit' %}",
    "success": function(response) {
    switch(response.code) {
    // Do what you want with the received response
    }
    }
    });
    return false;
    });
    });

    AJAX 网址

    urlpatterns = patterns('',
    url(r'^ajax/login/submit/$', 'path.to.login_submit', name='login-submit'),
    )

    AJAX View

    @require_AJAX
    def login_submit(request, label):
    # Code here the logging logic
    response = HttpResponse(json.dumps({'code':'42'}), content_type='application/json')
    return response

    请查看 this answerrequire_AJAX装饰器。

    我在提交表单时经常使用 AJAX(不仅仅是日志记录),所以我将上面的 JavaScript 代码应用于我所有的表单(使用 $("form").submit(...);)。但是我需要让 View 知道我发布的是哪个表单。如果您需要,这是我的操作方法:
  • 首先你的 URL 应该欢迎一个参数(表单的 id 对我来说)
  • 然后关联的 View 将能够知道使用相应的标签
  • 处理哪种情况。

    关于Django:登录用户并在同一页面上刷新而不定义模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com