Django实战项目-学习任务系统-用户登录

第一步:先创建一个Django应用程序框架代码

1,先创建一个Django项目

django-admin startproject mysite将创建一个目录,其布局如下:mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py

2,再创建一个Django应用

python manage.py startapp study_system将创建一个目录,其布局如下:study_systemstudy_system/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py详情操作参考《编写你的第一个 Django 应用程序》相关文章。
https://mp.weixin.qq.com/s?__biz=Mzg2NDk2MTY3OA==&mid=2247483730&idx=1&sn=0cab44a659067ad145f55a2553c25f4e&chksm=ce6014b3f9179da5b4cf08d43fc13819d2941c7287b234b99beb3722a29e7b863df62e2bbf97&token=737388&lang=zh_CN#rd 

 

第二步:编写第一个功能-用户登录

1,数据库设置
修改 settings.py 配置信息,采用mysql数据库
文件目录结构:
./mysite/mysite/settings.py

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'world',"USER": "root","PASSWORD": "123456","HOST": "127.0.0.1","PORT": "3306","OPTIONS": {"init_command": "SET default_storage_engine=INNODB", },}
}

 

2,创建模型

编辑模型文件:
./mysite/study_system/models.py

from django.db import modelsclass StudyUser(models.Model):user_id = models.AutoField(primary_key=True, verbose_name='用户ID')username = models.CharField(max_length=50, verbose_name='用户名')password = models.CharField(max_length=50, verbose_name='密码')email = models.EmailField(max_length=100, verbose_name='邮箱')phone_num = models.CharField(max_length=20, verbose_name='手机号码')role = models.IntegerField(verbose_name='角色', choices=((1, '系统管理员'), (2, '辅导员'), (3, '学生')))parent_id = models.IntegerField(verbose_name='辅导员用户ID', null=False)created_time = models.DateTimeField(verbose_name='创建时间')update_time = models.DateTimeField(verbose_name='更新时间')class Meta:verbose_name = '学习用户表'verbose_name_plural = '学习用户表'# 用于模型的数据库表的名称db_table = "study_users"


3,激活模型

3.1. 修改 settings.py 配置信息:
./mysite/mysite/settings.py

INSTALLED_APPS = ["study_system.apps.StudySystemConfig", #添加的应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]


3.2. 运行 makemigrations 命令(记得进入 manage.py 所在目录):
$ python manage.py makemigrations study_system

生成如下文件:
./mysite/study_system/migrations/0001_initial.py

3.3. 再运行 sqlmigrate 命令(记得进入 manage.py 所在目录):
sqlmigrate 命令采用迁移名称并返回其模型建表SQL语句:
$ python manage.py sqlmigrate study_system 0001

3.4. 最后再运行 migrate 命令(记得进入 manage.py 所在目录):
$ python manage.py migrate
实现在数据库中创建这些模型表结构。


4,编写用户登录视图

4.1. 编辑视图代码:
./mysite/study_system/views.py

# 登录首页视图
def index(request):context = {}return render(request, "study_system/index.html", context)# 通用视图模型,FormView , 表单视图
class LoginView(FormView):template_name = 'study_system/index.html'form_class = LoginForm# 设置成功登录后的重定向URL# success_url = 'home/'success_url = reverse_lazy('study_system:home')  # 修改为完整的 URL# 登录表单校验def form_valid(self, form):username = form.cleaned_data['username']password = form.cleaned_data['password']# 内置用户权限认证方法,不管用# user = authenticate(username=username, password=password)user = self.validate_user(username, password)if user:# 设置 sessionself.request.session['username'] = usernameself.request.session['role'] = user.role'''在登录视图类中,当用户通过验证并且认证成功时,调用 super().form_valid(form) 方法会触发 Django 的默认行为,其中包括登录用户并将登录状态信息与请求相关联。这样,request.user 对象将被设置为已认证的用户,并且 request.user.is_authenticated 将返回 True。'''return super().form_valid(form)else:return self.render_to_response(self.get_context_data(form=form, error_message='用户或密码不匹配,登录失败.'))# 校验用户密码是否存在def validate_user(self, username, password):try:# 根据用户名和密码查询用户user = StudyUser.objects.get(username=username, password=password)# print('根据用户名和密码查询用户:'+str(user))return userexcept StudyUser.DoesNotExist:return None# 登录成功主页视图
def home(request):# 响应容器rsp_dict = {}# 获取当前用户名username = request.session.get('username')# 根据用户名获取用户对象cur_user = StudyUser.objects.get(username=username)print('根据用户名查询用户对象:' + str(cur_user))# print('session : '+str(username))rsp_dict['username'] = usernametemplate_name = "study_system/home.html"return render(request, template_name, rsp_dict)


4.2. 编辑表单验证代码:
./mysite/study_system/forms.py

from django import forms# 登录用户表单验证
class LoginForm(forms.Form):username = forms.CharField(max_length=100)password = forms.CharField(widget=forms.PasswordInput)


4.3. 编辑页面模板代码:

4.3.1. 网站首页登录页面
./mysite/study_system/templates/study_system/index.html

<!DOCTYPE html>
<html>
<head>{#    让网页自动适应PC端和移动端#}<meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">{#    viewport是view portion的意思,用汉语说,就是“可见区域“。所以这个标签是在定义可见区域的规则。#}{#    width=device-width的意思是”宽度自动适配设备屏幕宽度"#}{#    inital-scale=1.0的意思是“宽度默认为设备屏幕的宽度”。#}<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>study system</title><link rel="stylesheet" href="/static/study_system/bootstrap3/css/bootstrap.min.css">{#    让网页自动适应PC端和移动端#}<style>.container {max-width: 400px;margin: 0 auto;padding-top: 100px;}</style>
</head>
<body><div class="container"><h1 class="text-center">study system</h1><form method="post" action="{% url 'study_system:login' %}">{% csrf_token %}{#        在Django中提交数据到后端服务的时候,为了安全,要使用CSRF(跨站请求伪造)。#}{#        跨站请求伪造的问题在于,服务器信任来自客户端的数据。#}{#        常规的做法是在template模板HTML文件中的form表单 中添加 {% csrf_token %} 可以实现安全提交。#}{#        当我们使用from表单标签来发送请求时,如果需要csrftoken认证,那么必须将它写到我们的form表单标签里面,里面的任意位置。#}{#        生成的隐藏标签为:#}{#        <input type="hidden" name="csrfmiddlewaretoken" value="WVHKQeAuMS4RGqyLybryIBAfacDa1Dp7PEaB3Badv3y0fvLqydX36xAVen6z3oS4">#}<div class="form-group"><input type="text" class="form-control" id="username" name="username" placeholder="username"></div><div class="form-group"><input type="password" class="form-control" id="password" name="password" placeholder="password"></div><div class="form-group"><button type="submit" class="form-control btn-primary">登录账号</button></div><div class="form-group"><a href="{% url 'study_system:register' %}" class="form-control btn-link text-right">注册账户</a></div><!-- 在 body 标签中添加一个隐藏的弹框 --><div class="form-group" id="errorModal" style="display: none;"><p id="alert" class="alert alert-warning">{{ error_message }}</p></div></form>
</div><script src="/static/study_system/jquery1.3.3/jquery.min.js"></script><!-- 在登录页面的合适位置调用弹框 -->
{% if error_message %}<script>$(document).ready(function () {// 设置错误消息内容$("#alert").text("{{ error_message }}");// 显示弹框$("#errorModal").show();});</script>
{% endif %}
</body>
</html>

4.3.2. 网站登录成功用户主页面
./mysite/study_system/templates/study_system/home.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>study system</title><script src="/static/study_system/jquery1.3.3/jquery.min.js"></script><link rel="stylesheet" href="/static/study_system/bootstrap3/css/bootstrap.min.css"><style type="text/css">.content_html {width: 100%;height: auto;margin: 0.2em auto 0.2em auto;border: 0.1em solid #68FE61;}</style>
</head>
<body>
<div>{% include "study_system/common/head.html" %}<div class="content_html">主内容区域</div>
</div>
</body>

4.3.3. 网站登录成功用户菜单页面
./mysite/study_system/templates/study_system/common/head.html

<div><!-- 头部logo区 --><div align="center"><a href="/study_system/home/">study system</a></div><!-- 头部菜单区 -->{#两端对齐的导航元素#}<ul class="nav nav-pills nav-justified"><li class="menu-head"><a href="#">任务管理</a></li><li class="menu-head"><a href="#">定时任务管理</a></li><li class="menu-head"><a href="#">兑换物品管理</a></li><li class="menu-head"><a href="#">用户管理</a></li><li class="menu-head"><a href="#"><strong>欢迎: {{ request.session.username }}</strong> 退出</a></li></ul>
</div>

4.4. 编辑应用 urls 配置代码:
./mysite/study_system/urls.py

from django.urls import path
from . import views
from .views import LoginViewapp_name = 'study_system'urlpatterns = [# 登录注册首页urlpath('', views.index, name='index'),path('login/', LoginView.as_view(), name='login'),path('home/', views.home, name='home'),
]


4.5. 编辑项目 urls 配置代码:
./mysite/mysite/urls.py

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path("study_system/", include("study_system.urls")),    # 应用urlspath('admin/', admin.site.urls),    # admin后台管理 urls
]

第三步:运行测试-用户登录功能

 -------------------------------------------------------------end -------------------------------------------------------------

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

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

相关文章

开发餐饮类私域流量是开发应用APP还是小程序还是低代码跨平台APP分析他的利与弊

在开发餐饮类应用程序时&#xff0c;我们需要先了解市场需求&#xff0c;定义目标受众&#xff0c;并提供独特的功能。个人感觉我们提供周围的在线订购、外卖服务、用户评价等功能&#xff0c;以吸引用户。同时&#xff0c;设计用户习惯的界面&#xff0c;使用户轻松选择自己的…

Java使用Hutool工具包将汉字转换成汉语拼音

主题&#xff1a;使用Java将汉字转换成拼音 介绍 在Java开发中&#xff0c;有时候我们需要将汉字转换成拼音&#xff0c;以方便进行数据处理、搜索和排序等操作。本文将介绍如何使用Hutool和Pinyin4j这两个Java库来实现汉字转拼音的功能。 依赖库介绍 在开始之前&#xff0c;…

mc我的世界云服务器租用价格表

开Minecraft我的世界服务器配置怎么选择&#xff1f;10人以内玩2核4G就够用了&#xff0c;开我的世界服务器选择轻量应用服务器就够了&#xff0c;轻量CPU采用至强白金处理器&#xff0c;大型整合包一般1.12版本的&#xff0c;轻量2核4G配置都差不多的&#xff0c;如果是1.16的…

在线免费无时长限制录屏工具 - 录猎在线版

需要录屏的小伙伴注意啦&#xff0c;想要长时间录制又不想花钱的&#xff0c;可以看下这款在线版录屏软件 —— 录猎在线版&#xff0c;一个录屏软件所需要的基本功能它都有&#xff0c;设置录制范围、录制的声音来源、摄像头也能录制的。同时它是支持Windows和Mac系统的&#…

PyCharm搭建Scrapy环境

Scrapy入门 1、Scrapy概述2、PyCharm搭建Scrapy环境3、Scrapy使用四部曲4、Scrapy入门案例4.1、明确目标4.2、制作爬虫4.3、存储数据4.4、运行爬虫 1、Scrapy概述 Scrapy是一个由Python语言开发的适用爬取网站数据、提取结构性数据的Web应用程序框架。主要用于数据挖掘、信息处…

【计算机网络】-基础知识

1.计算机网络&#xff08;计算机技术通信技术&#xff09;的结合 ICTITCT 2.计算机分类1&#xff1a;通信子网&#xff08;通信节点、通信链路&#xff09;&#xff0c;资源子网&#xff08;PC、服务器&#xff0c;类似终端节点&#xff09; 分类2&#xff1a;网络的结构,例如…

Mac电脑交互式原型设计 Axure RP 8汉化最新 for mac

Axure RP 8是一款专业且快速的原型设计工具&#xff0c;主要用于定义需求、规格、设计功能和界面。这款工具主要适用于用户体验设计师、交互设计师、业务分析师、信息架构师、可用性专家和产品经理等职业。 Axure RP 8的主要特性包括能够快速设计出应用软件或Web网站的线框图、…

RustDay01——运行在线GitHub Rust环境

1.跟着教程进入GitHub教室 2. 授权确认后进入学习空间 3.点击链接进入在线平台 4.添加本机密钥对到GitHub 5. 安装依赖 我们使用在线的Linux试验平台&#xff0c;就自动帮我们clone好了仓库 我们直接在仓库目录执行 cargo install --force --path . 安装依赖 PS:其实刚开始…

uni-app:实现简易自定义下拉列表

效果 代码 <template><view><view class"dropdown-trigger" tap"showDropdown">{{ selectedItem }}</view><view class"dropdown-list" v-if"showList"><view class"dropdown-item" v-f…

电容笔值不值得买?ipad上好用的电容笔推荐

由于大多数学生都没有稳定的工作&#xff0c;在购买产品的时候&#xff0c;往往会选择一些比较经济实惠的产品。随着ipad的版本更新&#xff0c;以及出现更多的功能&#xff0c;它将逐渐进入我们的生活与工作。由于电子产品的不断升级&#xff0c;不断改进&#xff0c;对电容笔…

Spring WebClient 基于响应式编程模型的HTTP客户端

一、简介 WebClient是一个非阻塞的、可扩展的、基于Reactive Streams规范的HTTP客户端。它提供了一种简洁的方式来进行HTTP请求&#xff0c;并且可以很好地与其他Spring组件集成。WebClient支持同步和异步操作&#xff0c;使得它非常适合用于构建响应式应用程序。 WebClient允…

Unity ToLua热更框架使用教程(1)

从本篇开始将为大家讲解ToLua在unity当中的使用教程。 Tolua的框架叫LuaFramework&#xff0c;首先附上下载链接&#xff1a; https://github.com/jarjin/LuaFramework_UGUI_V2 这个地址的是UGUI的。 下载完之后导入项目&#xff0c;首先&#xff0c;我们要先让这个项目跑起…

BRISK: Binary Robust Invariant Scalable Keypoints全文翻译

pdf链接&#xff1a;https://pan.baidu.com/s/1gFAYMPJStl4cF0CswY9cMQ 提取码&#xff1a;yyds 摘要 从图像中有效和高效地生成关键点是文献中深入研究的问题&#xff0c;并形成了许多计算机视觉应用的基础。该领域的领导者是SIFT和SURF算法&#xff0c;它们在各种图像转换下…

为什么说,网络安全工程师是网安行业的天花板?

为什么说&#xff0c;网络安全工程师是网安行业的天花板&#xff1f; 最近看到网上有很多人在问诸如&#xff1a;“怎样成为网络信息安全工程师”等相关问题&#xff0c;甚至还有人说“网络安全工程师已经成为这个行业的天花板”&#xff0c;这可能与近几年网络安全事件频发&a…

深度解析locked勒索病毒,勒索病毒解密,数据恢复

locked勒索病毒曾经消失了一段时间&#xff0c;但是从今年6月份以来&#xff0c;这种类型的勒索病毒又“重出江湖”&#xff0c;被感染的服务器和企业越来越多&#xff0c;这让很多企业和安全运维人员都非常头疼。为了减少这种情况的发生&#xff0c;云天数据恢复中心将对locke…

微信小程序 获取当前屏幕的可见高宽度

很多时候我们做一下逻辑 需要用整个窗口的高度或宽度参与计算 而且很多时候我们js中拿到的单位都是px像素点 没办法和rpx同流合污 官方提供了wx.getSystemInfoSync() 可以获取到部分窗口信息 其中就包括了整个窗口的宽度和高度 wx.getSystemInfoSync().windowHeight 返回值为像…

网络原理之TCP_IP

目录 应用层重点协议 传输层重点协议 1.UDP协议 (一)UDP协议段格式 (二)UDP的特点 无连接 不可靠传输 面向数据报 全双工 缓冲区 大小受限 (三)基于UDP的应用层协议 (四)面试题 2.TCP协议 (一)TCP协议段格式 (二)TCP的特点 有连接 可靠传输 面向字节流 缓冲…

Python教程——配置环境,再探IDE

文章目录 一、Python安装下载安装验证 二、第一个Python程序常见问题 三、Python解释器四、PyCharm工具安装和配置安装使用PyCharm基本使用 一、Python安装 下载 如果我们想要使用Python语言编写程序&#xff0c;我们必须下载Python安装包并配置Python环境&#xff0c;我们现…

geecg-uniapp 源码下载运行 修改端口号 修改tabBar 修改展示数据

APP体验&#xff1a; http://jeecg.com/appIndex技术官网&#xff1a; http://www.jeecg.com安装文档&#xff1a; 快速开始 JeecgBoot 开发文档 看云视频教程&#xff1a; 零基础入门视频官方支持&#xff1a; http://jeecg.com/doc/help 一&#xff0c;下载安装 源码下载…

C++ 类和对象篇(三) 空类和6个默认成员函数

目录 一、空类 1. 是什么&#xff1f; 2. 空类中的成员 3. 空类的大小 二、6个默认成员函数 三、 构造函数 1. 构造函数是什么&#xff1f; 2. 为什么C要引入构造函数&#xff1f; 四、析构函数 1. 析构函数是什么&#xff1f; 2. 为什么要有析构函数&#xff1f; 五、拷贝构造…