python Django学习(2)—— 实现一个简单的登陆功能

前言

    上一篇文章中记录了Django的安装与简单使用,接下来就做一个可能对于我们初学者来说都愿意做的一件事情——实现一个登陆的功能。

一、项目与app创建

    首先我们按照上一篇文章的教程来创建出project和app:
在这里插入图片描述
    这里我们要提一下templates这个文件夹:templates文件夹是用来存放我们的HTML文档的。如果我们要做一个登陆界面,我们首先需要有一个登陆界面的html,然后再有一个home界面,如果用户名和密码验证成功了,则让页面跳转到我们的home页面。
    创建好project,我们运行一下看看是否创建完成:
在这里插入图片描述

二、HTML文件创建

    上一节我们提到html写下templates文件夹下,那么django是如何找到我们的HTML的呢?
    打开mysite_login文件夹下的setting是文件,找到TEMPLATES:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

    我们可以看到: ‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],列表里的第二个参数就是我们的templates文件夹。
    我们创建两个HTML文档:login.html、home.html.
    login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <link rel="stylesheet" href="/static/commons.css">
    <style>
        label{
            width: 80px ;
            text-align: right;
            display: inline-block;
        }
    </style>
</head>
<body>
    <form action="/login/" method="post">
        <p>
            <label for="username">用户名:</label>
            <input id="username" name="user" type="text">
        </p>
        <p>
            <label for="password">密码:</label>
            <input id="password" name="pwd" type="password">
            <input type="submit" value="提交">
            <span style="color: red;">{{ error_msg }}</span>
        </p>
    </form>

</body>
</html>

    home.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>后台管理</title>
    <link rel="stylesheet" href="/static/commons.css">
</head>
<body style="margin: 0">
    <div style="height: 48px;background-color: #dddddd"></div>
    <div>
        <h1 class="c1">欢迎来到我的第一个Django网站!</h1>
    </div>
    <div style="height: 48px;background-color: #dddddd"></div>
</body>
</html>

注:我们这里用到了CSS,对于我们一般web开发都会用到CSS和JS,那么CSS和JS在django中如何使用呢?

    对于静态文件(CSS、JS),我们需要额外创建一个文件夹:static,将CSS和JS文件都写到这个文件夹中,然后去settings.py中配置静态文件,在settings.py的最后加上:

# 配置静态文件
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,'static'),
)

    这样的话我们的静态文件就能使用了。
    我们写一个简单的CSS文件:commons.css:

body{
    background-color: #eeeeee;
}

.c1{
    background-color: red;
    text-align: center;
}

三、逻辑业务编写

    接下来我们就来写我们的views.py,也就是我们的业务逻辑:

from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
# Create your views here.

def login(request):
    # 包含用户提交的所有信息
    # 获取用户提交方法
    error_msg = ""
    if request.method == "POST":
        # 获取用户通过POST提交过来的数据
        user = request.POST.get('user',None)
        pwd = request.POST.get('pwd',None)

        if user == 'root' and pwd == '123':
            # 如果用户名和密码正确,就跳转
            return redirect('/home/') # 跳转到home界面,redirect用于跳转
        else:
            # 用户名和密码不匹配
            error_msg = "用户名或密码错误"


    return render(request,'login.html',{'error_msg':error_msg})     # render用于获取我们的html页面
    # render中第三个参数的意思:第三个参数是一个字典,作用是我们的django找到这个login.html页面,然后将
    # 里面的特殊字符error_msg替换成123


def home(request):
    return render(request,'home.html')

代码解释:

user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)

    这两句是根据html中form表单的name属性来获取用户提交的用户名和密码。

if request.method == "POST":
        # 获取用户通过POST提交过来的数据
        user = request.POST.get('user',None)
        pwd = request.POST.get('pwd',None)

        if user == 'root' and pwd == '123':
            # 如果用户名和密码正确,就跳转
            return redirect('/home/') # 跳转到home界面,redirect用于跳转
        else:
            # 用户名和密码不匹配
            error_msg = "用户名或密码错误"

    这个if语句是用来获取用户提交的数据并进行判断。

return redirect('/home/') # 跳转到home界面,redirect用于跳转

    这里是用于跳转到我们的home界面,redirect用于跳转。这里的参数写的是路由,也就是在urls.py中配置的URL。

def home(request):
    return render(request,'home.html')

    这里是用于返回home界面,render是当然函数返回的界面。

    然后配置路由urls.py:

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from login import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('home/', views.home),
]

四、运行

    似乎一切准备就绪了,我们来运行一下:
在这里插入图片描述

    我们直接点一下提交,看看会发生什么:
在这里插入图片描述

    糟糕,出错了,怎么办!!!
    不要慌,我们来看看是什么错误:
在这里插入图片描述
    这个错误的解决方法:到settings.py中找到有关CSRF的配置,然后将它注释掉:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

    再次运行:
在这里插入图片描述
    输入用户名和密码,点击提交:
在这里插入图片描述

													##### 大功告成!!####
写在最后

    本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值