从django登录主页



我遵循了本页中的指示主页登录表单Django

为了将登录表单直接放到网站的主页上,而不是有一个单独的页面用于登录和注册等,

但是上面的链接没有显示views.py和base.html

所以我不知道如何使表单可见。

如果你去现场:http://mtode.com

它缺少ID和密码表单,而且当我试图在其他表单上键入时,它会给我带来一个错误,这是一个发布内容的postform。

这是视图.py

def login(request):
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                redirect_url = '/'
            else:
                messages.error(request, "Not Successfully Created")
        else:
            messages.success(request, "Successfully Created")
@login_required
def post_list(request):
    form = PostForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit=False)
        print (form.cleaned_data.get("title"))
        instance.save()
        # message success
        messages.success(request, "Successfully Created")
        return HttpResponseRedirect(instance.get_absolute_url())
    #else:
        #messages.error(request, "Not Successfully Created")
    queryset = Post.objects.all()#.order_by("-timestamp")
    context = {
        "object_list": queryset,
        "title": "List",
        "form": form,
    }
    return render(request, "post_list.html", context)

urls.py

url(r'^login/$', 'django.contrib.auth.views.login', name='login'),
url(r'^logout/$', 'django.contrib.auth.views.logout', name='logout')

(尽管我不知道为什么我必须把这些代码放在什么用途后,将以下代码放在设置.py重定向)

设置.py

LOGIN_URL = reverse_lazy('login')
LOGIN_REDIRECT_URL = reverse_lazy('home')

最后是post_list.html

   {% extends "base.html" %}
    {% block content %}
        {% if form.errors %}
            <p>Your username and password didn't match. Please try again.</p>
        {% endif %}
        {% if next %}
            {% if user.is_authenticated %}
                <p>Your account doesn't have access to this page. To proceed,
                please login with an account that has access.</p>
            {% else %}
            <p>Please login to see this page.</p>
            {% endif %}
        {% endif %}
    <form method="post" action="">
    {% csrf_token %}
    <table>
    <tr>
        <td>{{ form.username.label_tag }}</td>
        <td>{{ form.username }}</td>
    </tr>
    <tr>
        <td>{{ form.password.label_tag }}</td>
        <td>{{ form.password }}</td>
    </tr>
    </table>
    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next }}" />
    </form>
    {# Assumes you setup the password_reset view in your URLconf #}
    <p><a href="">Lost password?</a></p>
    <div class='two columns right mgr'>
      <h1>Form</h1>
    <form method='POST' action=''>{% csrf_token %}
    {{ form.as_p }}
    <input class="button-primary" type='submit' value='Create Post' />
    </form>
    </div>
    <div class='four columns left'>
      <h1>{{ title }}</h1>
    {% for obj in object_list %}
    <div class="row">
      <div>
        <a href='{{ obj.get_absolute_url }}'>
        <div class="thumbnail">
          <!--<img src="..." alt="...">!-->
          <div class="caption">
            <h3>{{ obj.title }}<small> {{ obj.timestamp|timesince }} ago</small></h3>
            <p>{{ obj.content|linebreaks|truncatechars:120 }}</p>
          <!--  <p><a href='{{ obj.get_absolute_url }}' class="btn btn-primary" role="button">View</a> </p>-->
          </div>
        </div></a>
      </div>
      <hr />
    </div>
    {% endfor %}
    </div>
    {% endblock content %}

您的第一个表单设置不正确。一种解决方案可以是做类似htis的事情:

  <form action="/login/?next=/home/" method="post">
   {% csrf_token %} 
      <input type="text" placeholder="Username" name="username">
      <input type="password" placeholder="Password" name="password">
    <button type="submit">Sign in</button>
  </form>

操作中的url必须转到您的登录,下一个链接将是登录后的返回位置。

相关内容

最新更新