Django入门笔记:第十三章、用户登录

举报
宇宙之一粟 发表于 2022/01/15 00:14:05 2022/01/15
【摘要】 前言 从之前的学习我们发现,一直在blog应用中进行开发。本章开始新建另一个App来开发,介绍Django的身份认证模块,实现用户登录、注册、注销。 一个简单的登录界面 创建应用 为了实现用户登录...

前言

从之前的学习我们发现,一直在blog应用中进行开发。本章开始新建另一个App来开发,介绍Django的身份认证模块,实现用户登录、注册、注销。

一个简单的登录界面

创建应用

为了实现用户登录、退出、注册等功能,从而进行用户管理,创建一个新的应用。

python manage.py startapp accounts

  
 
  • 1

然后我们就多了一个accounts目录,然后在/myblog/settings.py中对新应用进行配置。

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在./accounts目录中创建urls.py文件,然后设置本应用中的路径。

from django.urls import path
from . import views


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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后在./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')),	# 新增
]


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

基本配置到位,接下来我们设计用户登录界面:

登录表单设计

./account目录下新建forms.py,代码如下:

from django import forms


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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

登录视图函数

编辑./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})


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

登录前端界面

./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 %}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

修改./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>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

文章来源: blog.csdn.net,作者:宇宙之一粟,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yuzhou_1shu/article/details/107053520

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。