Django入門筆記:第十三章、用戶登錄

前言

從之前的學習我們發現,一直在blog應用中進行開發。本章開始新建另一個App來開發,介紹Django的身份認證模塊,實現用戶登錄、註冊、註銷。

一個簡單的登錄界面

創建應用

爲了實現用戶登錄、退出、註冊等功能,從而進行用戶管理,創建一個新的應用。

python manage.py startapp accounts

然後我們就多了一個accounts目錄,然後在/myblog/settings.py中對新應用進行配置。

INSTALLED_APPS = [
  ...,
  'blog',
  'accounts',
]

在./accounts目錄中創建urls.py文件,然後設置本應用中的路徑。

from django.urls import path
from . import views


app_name = "accounts"
urlpatterns = [
    path('login/', views.user_login, name='user_login'),
]

然後在./myblog/urls.py配置accounts應用的URL配置:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from blog import views


urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', views.home, name='home'),
    path('<int:article_id>/', views.blog_article),  
    path('accounts/', include('accounts.urls', namespace='accounts')),	# 新增
]

基本配置到位,接下來我們設計用戶登錄界面:

登錄表單設計

./account目錄下新建forms.py,代碼如下:

from django import forms


class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

登錄視圖函數

編輯./account/views.py文件,實現user_login()的視圖函數:

from django.shortcuts import render, HttpResponse
from django.contrib.auth import authenticate, login
from . forms import LoginForm


# Create your views here.
def user_login(request):
    if request.method == "POST":
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            cd = login_form.cleaned_data
            user = authenticate(username=cd['username'], password=cd['password'])

            if user:
                login(request, user)
                return HttpResponse("歡迎你,登錄成功")
            else:
                return HttpResponse("抱歉,用戶名或者密碼錯誤")
        else:
            return HttpResponse("登錄非法")

    else:
        login_form = LoginForm()

    return render(request, "accounts/login.html", {"form": login_form})

登錄前端界面

./templates/accounts/login.html模板,代碼如下:

{% extends "base.html" %}

{% block title %}登錄{% endblock %}

{% block content %}
    <div class="container text-center" >
        <h1>用戶登錄</h1>
        <p>
            輸入你的用戶名和密碼
        </p>
        <form action="." method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <p><input type="submit" value="登錄"></p>
        </form>
    </div>
{% endblock %}

修改./templates/base.html,代碼如下:

{% load staticfiles %}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{% endblock %}</title>
        <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    </head>
    <body>
        <div id="header">
            <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
                <div class="container" >
                    <a class="navbar-expand" href="{% url 'home' %}">主頁</a>
                    <ul class="nav navbar-nav navbar-light" style="margin-right: 10px">
                        <li><a href="{% url 'accounts:user_login' %}">登錄</a> </li>
                    </ul>
                </div>
            </nav>
        </div>
        <div class="container">
            <div id="content">
                {% block content %}
                {% endblock %}
            </div>
        </div>
    </body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章