使用Django验证用户

时间:2018-08-02 10:13:25

标签: django python-3.x

我有登录html页面和索引html页面,但是当我写下用户名和密码时,该页面只会刷新而不执行任何操作。 我使用Django 2.x和Python 3.4

登录html中的代码:

      <form class="form-signin" action='{% url 'myapp:index' %}' method="post">
    {% csrf_token %}

    <img class="mb-4" src='{% static 'app/img/logo.png' %}' alt="" width="300" height="100">

    <h1 class="h3 mb-3 font-weight-normal">mysite</h1>
    <br>
    <div class="group">
        <input type="username" id="inputUser" name="username" class="form-control" placeholder="Username" required autofocus alt="" width="300" height="100">
    </div>

    <div class="group">
        <input type="password" id="inputPassword" name="password" class="form-control" placeholder="Password" required alt="" width="300" height="100">
    </div>

    <div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Accedi</button>
    </div>

  </form>

这是我的观点:

def index(request):
    username = request.post["username"]
    password = request.post["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return render(request, "myapp/index.html")

我做错了什么? 谢谢

编辑:

我的error.log

  

AH00558:httpd.exe:无法使用fe80 :: 1c06:8ac5:1b1e:aa2f可靠地确定服务器的标准域名。全局设置“ ServerName”指令以禁止显示此消息   [2018年8月2日星期四12:35:17.911829] [mpm_winnt:notice] [pid 4196:tid 452] AH00455:配置了Apache / 2.4.34(Win64)mod_wsgi / 4.6.4 Python / 3.6-恢复正常运行   [2018年8月2日星期四12:35:17.912829] [mpm_winnt:notice] [pid 4196:tid 452] AH00456:构建的Apache Lounge VC15服务器:2018年7月11日13:09:01   [2018年8月2日星期四12:35:17.912829] [core:notice] [pid 4196:tid 452] AH00094:命令行:'c:\ Apache \ bin \ httpd.exe -d C:/ Apache'   [2018年8月2日星期四12:35:17.913829] [mpm_winnt:notice] [pid 4196:tid 452] AH00418:父级:创建的子进程2112   AH00558:httpd.exe:使用fe80 :: 1c06:8ac5:1b1e:aa2f无法可靠地确定服务器的标准域名。全局设置“ ServerName”指令以禁止显示此消息   AH00558:httpd.exe:使用fe80 :: 1c06:8ac5:1b1e:aa2f无法可靠地确定服务器的标准域名。全局设置“ ServerName”指令以禁止显示此消息   [2018年8月2日星期四12:35:18.335853] [mpm_winnt:notice] [pid 2112:tid 472] AH00354:孩子:启动了64个工作线程。

我的access.log:

  

myip--[02 / Aug / 2018:12:35:28 +0200]“ GET / myapp / HTTP / 1.1” 200 2633   myip--[02 / Aug / 2018:12:35:48 +0200]“ POST / myapp / HTTP / 1.1” 200 2633

EDIT2: 我将url.py从路径更改为url并解决了问题...感谢大家,现在页面可以正确加载

2 个答案:

答案 0 :(得分:0)

user = authenticate(request, username=username, password=password)

无需将请求作为参数传递

user = authenticate(username=username,password=password)

它可以解决您的错误。

另一种方式- 您也可以参考本教程: https://simpleisbetterthancomplex.com/tutorial/2016/06/27/how-to-use-djangos-built-in-login-system.html

答案 1 :(得分:0)

您可以尝试以下方法:-

from django.contrib.auth.forms import AuthenticationForm

def index(request):
form = AuthenticationForm(None, request.POST)
if form.is_valid():
    login(request, form.get_user())
    return render(request, "index.html", {'message':"successfully login"})