Django实现基础登录注册验证
本文最后更新于 275 天前,其中的信息可能已经有所发展或是发生改变。

一、Django概述与安装

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。

Django 框架的核心组件有:

  • 用于创建模型的对象关系映射;
  • 为最终用户设计较好的管理界面;
  • URL 设计;
  • 设计者友好的模板语言;
  • 缓存系统。

Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。

MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

层次职责
模型(Model),即数据存取层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即表现层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。
视图(View),即业务逻辑层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

安装Django

pip install django -i https://mirrors.aliyun.com/pypi/simple/

二、创建项目

1.1建立项目

cd .. 
mkdir django cd django 
# 创建项目 
django-admin startproject myFirstDjango

1.2默认文件介绍

mysite 
-   manage.py [项目的管理、启动 ]
-   mysite
    - __init__.py
    - settings.py   [项目配置]
    - urls.py   [页面代码和网址的对应关系][常用]
    - wsgi.py   [接收网络请求][不要动][同步]
    - asgi.py   [接收网络请求][不要动][异步]

三、创建登录应用

python manage.py startapp stu
- migrations    [使用较少] 数据库变更记录
        -__init__.py 
    - __init__.py
    - admin.py  [django后台提供admin功能]
    - apps.py   [使用较少] app启动类
    - models.py [重要,对数据库进行操作][M]
    - tests.py  [测试使用]
    - views.py  [重要,定义函数][V]
    - templates [模版文件] [T]

此时就可以在命令行中输入如下命令行来初步运行项目

python manage.py runserver

打开浏览器输入127.0.0.1:8000

# 执行结果
System check identified no issues (0 silenced).
April 16, 2023 - 09:28:42
Django version 3.2.18, using settings 'myFirstDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

2.编写登录页面

2.1新建项目stu

python manage.py startapp stu

2.2在urls.py中添加如下内容

from django.contrib import admin
from django.urls import path,include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('student/', include('stu.urls'))
]

2.3修改settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'stu'
]

2.4修改stu/urls.py

#coding=utf-8
from django.urls import path
from . import views

urlpatterns = [
    path('', views.login_view)
]

2.5修改stu/views.py

from django.shortcuts import render

# Create your views here.h
def login_view(request):

    return render(request, 'login.html')

2.6新建templates文件夹,编写login.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="" method="get">
        <p>
            <label>用户名:</label><input type="text" name="uname"/>
        </p>
        <p>
            <label>密&emsp;码:</label><input type="pwd" name="pwd"/>
        </p>
       <p>
            &emsp;&emsp;&emsp;&emsp;<input type="submit" name="提交"/>
        </p>
    </form>
</body>
</html>

在settings.py中,补充前端文件路径

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['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',
            ],
        },
    },
]

2.7打开pycharm终端,输入命令

python manage.py runserver

# 成功结果
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations
 for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
April 13, 2023 - 11:02:50
Django version 3.2.18, using settings 'myFirstDjango.settings'
Starting development server at http://127.0.0.1:8000/

四、实现登录验证

1.GET方法

1.修改login.html中表单form的action

<body>
    <form action="/student/login/" method="get">

2.修改stu/urls.py路由

#coding=utf-8
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index_view),
    path('login/', views.login_view)
]

3.修改views.py文件,添加判断

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
#渲染登录首页
def index_view(request):

    return render(request, 'login.html')

#处理登录功能
def login_view(request):
    #接收请求参数
    uname = request.GET.get('uname', '')
    pwd = request.GET.get('pwd', '')

    if uname == 'zhangsan' and pwd == '123':
        return HttpResponse('登录成功')

    return HttpResponse('登录失败')

2、POST方法

1.修改login.html中的方法为post

并添加{% csrf_token %}作为中间件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/student/login/" method="post">
        {% csrf_token %}
        <p>
            <label>用户名:</label><input type="text" name="uname"/>
        </p>
        <p>
            <label>密&emsp;码:</label><input type="pwd" name="pwd"/>
        </p>
       <p>
            &emsp;&emsp;&emsp;&emsp;<input type="submit" value="登录"/>
        </p>
    </form>
</body>
</html>

2.修改views.py

#处理登录功能
def login_view(request):
    #接收请求参数
    uname = request.POST.get('uname', '')
    pwd = request.POST.get('pwd', '')

    if uname == 'zhangsan' and pwd == '123':
        return HttpResponse('登录成功')

    return HttpResponse('登录失败')

五、实现注册功能

1、修改stu/urls.py

#coding=utf-8
from django.urls import path
from . import views

urlpatterns = [
    # path('', views.login_view),
    path('register', views.index_view),
    path('login',views.login_view)
]

2、修改views.py

from django.http import HttpResponse
from django.shortcuts import render
from .models import *


# Create your views here.
def login_view(request):
    return render(request, 'login.html')


def index_view(request):
    m = request.method
    if m == 'GET':
        return render(request, 'register.html')
    else:
        # 获取请求参数
        uname = request.POST.get('uname', '')
        pwd = request.POST.get('pwd', '')
        print(uname)
        print(pwd)
        # 判断
        if uname and pwd:
            # 创建模型对象
            stu = Student(sname=uname, spwd=pwd)
            # 插入数据库
            stu.save()

            return HttpResponse('注册成功')
        else:
            return HttpResponse('注册失败')

3、新建register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/student/register/" method="post">
        {% csrf_token %}
        <p>
            <label for="ua">用户名</label><input type="text" name="uname" id="ua"/>
        </p>
        <p>
            <label for="pd">密&emsp;码</label><input type="password" name="pwd" id="pd"/ >
        </p>
        <p>
            <input type="submit" value="注册">
    </form>
</body>
</html>

4.编辑models.py,定义字段的约束

必须引用.Model类

from django.db import models

# Create your models here.
class Student(models.Model):
    sname = models.CharField(max_length=30, unique=True)
    spwd = models.CharField(max_length=30)
    # class Meta:
    #     db_table='t_stu'

5.db.splite3连接splite3数据库

6.建立迁移文件

python manage.py migrate
python manage.py makemigrations stu
python manage.py migrate

7.测试是否成功,查看数据库是否新增了信息

六、将后端的结果再传给前端

修改路由,添加test:

#coding=utf-8
from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.index_view),
    path('login/',views.login_view),
    path('test/',views.test_view)
]

后端代码,修改stu/views.py

def test_view(request):
    m = request.method
    if m == 'GET':
        return render(request, 'test.html')
    else:
        uname = request.POST.get('uname','')
        truedata = []
        all_student = Student.objects.filter(sname=uname)

        print(all_student)
        for i in all_student:
            result = {
                'name':i.sname,
                'pwd':i.spwd
            }
            truedata.append(result)
        print(truedata)
        truedata = {
            'info':truedata[0]
        }
        return render(request, 'test.html', {'fontdata': truedata})

前端代码,新建test.html

<!DOCTYPE html>
<html>
<head>
    <title>My Template</title>
</head>
<body>
    <form action="/student/test/" method="post">
        {% csrf_token %}
        <p>
            <label for="ua">请输入你希望查询的学生姓名: </label><input type="text" name="uname" id="ua"/>
        </p>
        <p>
            <input type="submit" value="查询">
    </form>
    <h1>Welcome, {{ fontdata.info.name }}!</h1>
    <p>密码: {{ fontdata.info.pwd }}</p>
</body>
</html>

查询结果:

如果觉得文章有所帮助,可以选择智齿一下博主,一缘一分期待加入૮(˶ᵔ ᵕ ᵔ˶)ა
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇