利用Django搭建python web项目(简单登录)

news2024/11/15 21:35:41

1.概述

目前市面上web项目大多数是由java语言开发(结合spring框架),但这并不意味着只有java语言能够开发web项目,python语言、go语言同样可以做到。本文将利用Django框架(由python语言开发的web框架)来搭建一个简单的web项目,并实现简单登录功能。

2.实现过程

2.1 Django框架简介

2.1.1 Django框架优点

Django遵循MVC(Model-View-Controller)设计模式,提供了许多较为强大和便捷的工具来帮助开发。它的优势主要体现在以下几个方面:

  • 易于扩展:Django框架提供丰富的插件和模块,可以轻松地进行扩展和定制,例如:Django Fluent Dashboard、Python social auth等;
  • 安全性较高:Django框架内置了XSS(跨站点脚本)防护、CSRF(跨站点请求伪造)保护、密码哈希加密等;
  • 模块独立化:Django框架基于松耦合的设计原则,内部高度模块化,不同的模块可以独立编写、调测,极大地提高编写和测试的灵活性;
  • 自带后台:Django框架自带了一个丰富的后台管理系统,可以轻松实现一些内容管理;
  • 内置ORM框架:内置ORM,简单几行代码就可以连接数据库,并执行sql语句。

2.1.2 Django Web框架基础组件

Django的组件主要分为四个部分,模型(Model)、视图(View)、模版(Template)、路由(URLconf),具体解释如下:

  • 模型(Model):主要负责数据的存储和操作,和MVC中M层作用一致;
  • 视图(View):负责处理HTTP请求并返回HTTP相应,和MVC中的V层作用一致;
  • 模板(Template):负责渲染数据并生成HTML页面展示,类似于MVC中的C层;
  • URL路由(URLconf):负责将HTTP请求分发给相应的视图函数。

2.1.3 Django项目目录

  1. urls.py:网址入口,关联到对应的views.py中的一个函数(或generic类),访问网址就对应一个函数。

  2. views.py:处理用户发出的请求,与urls.py对应, 通过渲染templates中的网页可以将显示内容,如登陆后的用户名,用户请求的数据等输出到网页。

  3. models.py:与数据库操作相关,存入或读取数据时用到,用不到数据库时可以不使用。

  4. forms.py:表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,也可以不使用。

  5. templates文件夹:views.py中的函数渲染templates中的html模板,得到动态内容的网页,可以用缓存来提高速度。

  6. admin.py:后台,可以用很少的代码就拥有一个强大的后台。

  7. settings.py:Django 的配置文件,如 DEBUG 的开关,静态文件的位置等。

2.2 搭建web项目

2.2.1 安装django

常用pip指令进行安装,如下:

pip install django

由于国内有墙,可以指定一些国内源即可:

pip install django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

安装完成后,可以通过以下命令来验证是否成功安装:

django-admin version

如果出现版本信息,则表明安装成功,如下:
在这里插入图片描述

2.2.2 创建项目

在这里插入图片描述

创建成功后目录结构如下:
在这里插入图片描述

setting:项目的配置文件,可以配置APP、数据库、中间件、模版等诸多信息;
urls:路由分发配置;
init:启动文件,会配置一些特殊信息;
manage:项目的管理文件;
wsgi:web服务器和Django交互的入口。

2.2.2 运行测试

1.利用以下指令启动项目

python manage.py runserver

在控制台中运行上述指令,启动成功后控制台会输出以下内容:
在这里插入图片描述
访问地址http://127.0.0.1:8000,会出现以下界面:
在这里插入图片描述

2.3 开发登录模块

2.3.1 创建项目

通过以下指令来创建python web项目,用于实现登录模块创建:

python manage.py startapp system

上述指令中的system就是登录模块名称。

2.3.2 注册应用程序

在根目录的setting.py文件中,将上述登录模块添加至INSTALLED_APPS 列表中,如下:

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

2.3.3 配置连接数据库

本文测试所使用的数据库为MySQL,在根目录的setting.py文件中,在DATABASES中配置MySQL连接信息,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'HOST': '128.71.104.132',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456'
    }
}

同时在根目录的_init_.py文件中添加如下配置,否则在启动时会报一些连接异常:

import pymysql
pymysql.install_as_MySQLdb()

2.3.4 定义模型

在Django 中,数据模型中使用Python类来定义,我们需要在应用程序(system)的 models.py 文件中定义数据模型,本文以用户Account类来定义:

 # Create your models here.
class Account(models.Model):
    password = models.CharField(max_length=200)
    name = models.CharField(max_length=20)
    email = models.CharField(max_length=20)
    mobile = models.CharField(max_length=20)
    id = models.IntegerField(primary_key=True)

上述代码中定义了一个Account数据模型,包含id,mobile,email,name,password等属性,max_length指定的是最大长度。建立完成数据模型后,需要生成对应表到数据库中,运行以下指令:

#指令1
python manage.py makemigrations
 
#指令2
python manage.py migrate

运行指令1会生成一个新的迁移文件夹migrations,将模型映射到数据库的文件将会被放在这个文件夹下。如下图所示:
在这里插入图片描述
运行指令2会将模型信息映射到数据库中并生成表。

2.3.5 编写视图函数

在 Django 中,视图函数用于处理 HTTP 请求并生成 HTTP 响应。因此在登录模块的views.py文件中,编写如下视图函数:

from django.shortcuts import render, HttpResponse, redirect, reverse
from system.models import Account


def login(request):
    if request.method == 'POST':
        print("进入页面")
        name = request.POST['username']
        password = request.POST['password']
        print(name+":"+password)
        #根据name查询数据库,获取列表中第一个元素
        corr_user = Account.objects.filter(name=name).first()
        print(dir(corr_user))
        print("获取到信息")
        if password == corr_user.password:
            print('登录成功')
            return HttpResponse('登录成功')

    return render(request, './system/login.html')


def logon(request):
    return HttpResponse('logon')


def logout(request):
    return redirect(reverse('login'))


def index(request):
    print("进入index")
    return redirect(reverse('login'))

在上面的例子中,我们定义了名为 login、logon、logout 、index的视图函数。在login函数中,我们校验了账号和密码信息,如果成功则返回登录成功页面,否则重新返回登录页面。

2.3.6 创建html登录页面

定义一个登录页面,包含登录账号和密码等字段,该html放置在template文件夹下,如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title> 登陆 </title>
</head>
<body>
<div class="demo form-bg">
    <div class="container">
        <div class="row">
            <div class="col-md-offset-4 col-md-4 col-sm-offset-3 col-sm-6">
                <form class="form-horizontal" action="{% url 'login' %}" method="post">
                    <div class="heading">登陆</div>
                    <div class="form-group">
                        <i class="fa fa-user"></i><input required name="username" type="text"
                                                         class="form-control" placeholder="Username"
                                                         id="username">
                    </div>
                    <div class="form-group">
                        <i class="fa fa-lock"></i><input required name="password" type="password"
                                                         class="form-control" placeholder="password"/>
                    </div>
                    <div class="form-group">
                        <div class="form_btn">
                            <button type="submit">登录</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
</body>
</html>

2.3.7 配置URL

在登录模块的urls.py文件中定义URL映射信息,具体如下:

from system.views import logout, logon, login
from django.urls import path

urlpatterns = [
    path('login/', login, name='login'),
    path('logon/', logon, name='logon'),
    path('logout/', logout, name='logout'),
]

我们分别将login、logon和logout映射到对应处理函数中。

2.3.8 测试验证

在这里插入图片描述
正确输入账号和密码信息后会出现以下页面:
在这里插入图片描述
同时控制台会打印如下信息:
在这里插入图片描述

2.3.9 注意事项

在同一台机器上启动项目,由前端直接访问python项目可能会出现跨域问题,因此需要添加如下配置:

ALLOWED_HOSTS = ['*']
# DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1']

3.小结

1.本文利用Django创建了一个python web项目,用于验证Django框架的便捷性,功能较为简单,并发和安全等相关性能需加强;
2.本文登录案例仅作为演示,需要进一步丰富各类入参校验,网关验证用户合法性等。

4.参考文献

1.https://www.cnblogs.com/fuchangjiang/p/17854807.html
2.https://www.djangoproject.com/

5.附录

https://gitee.com/Marinc/python-web.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

09. Springboot集成sse服务端推流

目录 1、前言 2、什么是SSE 2.1、技术原理 2.2、SSE和WebSocket 2.2.1、SSE (Server-Sent Events) 2.2.2、WebSocket 2.2.3、选择 SSE 还是 WebSocket&#xff1f; 3、Springboot快速集成 3.1、添加依赖 3.2、创建SSE控制器 3.2.1、SSEmitter创建实例 3.2.2、SSEmi…

esp32 操作DS1307时钟芯片

电气参数摘要 有VCC供电&#xff0c;IIC活动状态是1.5mA&#xff0c;待机状态200μA&#xff0c;电池电流5nA(MAX50nA&#xff09;无VCC供电的时候&#xff0c;电池电流&#xff0c;300nA&#xff08;时钟运行&#xff09;&#xff0c;10nA&#xff08;时钟停止&#xff09;供…

ASP.NET Core 7 Web 使用Session

ASP.NET Core 好像不能像20年前那样直接使用Session函数&#xff0c;我使用如下方法 1、在NuGet安装以下2个包 2、在Program.cs注册 //注册Session builder.Services.AddSession(options > {options.IdleTimeout TimeSpan.FromMinutes(60);options.Cookie.HttpOnly fals…

大小端(C语言)

一、什么是大小端&#xff1a; 1.大端(Big-Endian):高地址存放低位 2.小端(Little-Endian):高地址存放高位 例如&#xff1a;0x11223344在内存中存储 大小端影响了什么&#xff1f; 当基本数据类型占用字节数超过了1字节后&#xff0c;大小端决定了数据按照什么顺序存储在…

3. SQL 语言

重点&#xff1a; MySQL 的 三种安装方式&#xff1a;包安装&#xff0c;二进制安装&#xff0c;源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 3&#xff09;SQL 语言 3.1&#xff09;关系型数据库的常见…

C语言-算法-背包

[USACO07DEC] Charm Bracelet S&#xff08;01背包&#xff09; 题目描述 Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. E…

通过LiveNVR实现海康大华华为宇视等监控摄像头在服务器上录像存储,并web无插件直播和回放

支持云端录像服务器上面集中录像存储在部署LiveNVR的服务器上面 1、流媒体服务软件2、配置开启录像(云端录像)3、录像回看(云端录像)3.1、查看录像3.1.1、时间轴视图3.1.2、列表视图 4、云端录像相关接口5、如何分享时间轴录像回看&#xff1f;6、iframe集成示例7、RTSP/HLS/FL…

Docker 容器内运行 mysqldump 命令来导出 MySQL 数据库,自动化备份

备份容器数据库命令&#xff1a; docker exec 容器名称或ID mysqldump -u用户名 -p密码 数据库名称 > 导出文件.sql请替换以下占位符&#xff1a; 容器名称或ID&#xff1a;您的 MySQL 容器的名称或ID。用户名&#xff1a;您的 MySQL 用户名。密码&#xff1a;您的 MySQL …

数据结构——用链表实现Map

目录 一、映射&#xff08;Map&#xff09; 二、代码实现 1.建立接口 2.方法实现 &#xff08;1&#xff09;映射的建立 键&#xff08;key&#xff09;和值&#xff08;val&#xff09;的建立 重写toString方法 &#xff08;2&#xff09;构造方法 &#xff08;3&…

详解Mockito

详解Mockito 1. Mockito简介 在我们的编程世界中&#xff0c;测试是一个非常重要的环节&#xff0c;它能帮助我们确保代码的质量和稳定性。而在众多的测试方法中&#xff0c;Mock测试是一种非常有效的手段。 1.1 什么是 Mock 测试 Mock测试&#xff0c;顾名思义&#xff0c;…

夹耳式骨传导耳机怎么戴?有什么注意事项吗

骨传导耳机是靠震动我们的颅骨来播放声音的耳机&#xff0c;它的厉害之处在于不用塞进耳朵里&#xff0c;所以不会让耳朵感到堵塞。这意味着在运动、听歌、打电话等各种活动的时候&#xff0c;它们可以提供一个非常特别的体验。而骨传导耳机里有一种类别叫做夹耳式骨传导耳机&a…

2024初学编曲免费软件FL Studio21.2.2

FL Studio在业内也被称作“水果”软件&#xff0c;这是一款功能强大、简单易上手的专业编曲软件。软件中的音效插件库拥有超过25种音效插件&#xff0c;能够帮助激发我们的创作灵感。而FL Studio中文还推出了训练营课程&#xff0c;初学者可以在训练营中进行编曲知识的学习&…

Java多线程--线程的生命周期

文章目录 一、JDK1.5之前&#xff1a;5种状态五种状态1、新建2、就绪3、运行4、阻塞5、死亡 二、JDK1.5及之后&#xff1a;六种状态 Java语言使用 Thread类及其子类的对象来表示 线程&#xff0c;在它的一个完整的生命周期中通常要经历如下一些状态。 一、JDK1.5之前&#xf…

【Java面试】Mysql

目录 sql的执行顺序索引的优点和缺点怎么避免索引失效(也属于sql优化的一种)一条sql查询非常慢&#xff0c;我们怎么去排查和优化&#xff1f;存储引擎 MylSAM和InnoDB、Memory的区别事务的四大特性(ACID)脏读、不可重复读、幻读事务的隔离级别&#xff1f;怎么优化数据库SQL优…

Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑

场景 Java开发手册中为什么要求SimpleDateFormat时用y表示年&#xff0c;而不能用Y&#xff1a; Java开发手册中为什么要求SimpleDateFormat时用y表示年&#xff0c;而不能用Y_simpledateformat 怎么确定y就是年-CSDN博客 在使用SimpleDateFormat在获取当前日期时因使用了YY…

【DDD】学习笔记-软件开发团队的沟通与协作

领域驱动设计的核心是“领域”&#xff0c;因此要运用领域驱动设计&#xff0c;从一开始就要让团队走到正确的点儿上。当我们组建好了团队之后&#xff0c;应该从哪里开始&#xff1f;不是 UI 原型设计、不是架构设计、也不是设计数据库&#xff0c;这些事情虽然重要但却非最高…

STM32F1之RTC实时时钟(Unix时间戳)

目录 1. Unix时间戳 2. UTC/GMT 3. 时间戳转换 3.1 time_t 3.2 struct tm 3.3 char * 3.4 时间戳的使用 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置…

leetcode hot100 组合总和Ⅲ

本题中&#xff0c;要求我们求在1-9范围内&#xff0c;满足k个数的和为n的组合&#xff08;组合是无序的&#xff0c;并且题目中要求不可以重复&#xff09;。 这种组合问题依旧需要用回溯算法来解决。因为我们没办法控制产生k层for循环。回溯算法的过程是构建树结构&#xff…

巴厘行记(二)——乌布之夜

欢迎览阅《巴厘行记》系列文章 巴厘行记巴厘行记&#xff08;一&#xff09;——海神庙 巴厘行记&#xff08;二&#xff09;——乌布之夜 巴厘行记&#xff08;三&#xff09;——Auntie和Mudi 巴厘行记&#xff08;四&#xff09;——乌布漫游 巴厘行记&#xff08;五&a…

【学网攻】 第(10)节 -- 路由器单臂路由配置

系列文章目录 目录 系列文章目录 文章目录 前言 一、单臂路由是什么&#xff1f; 二、实验 1.引入 实验拓扑图 PC配置 Sw配置 Router配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交…