Django实战项目-学习任务系统-用户登录
第一步:先创建一个Django应用程序框架代码
1,先创建一个Django项目
django-admin startproject mysite 将创建一个目录,其布局如下: mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
2,再创建一个Django应用
python manage.py startapp study_system 将创建一个目录,其布局如下:study_system study_system/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.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 models class 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:
# 设置 session
self.request.session['username'] = username
self.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 user
except 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'] = username template_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>
</html>
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 LoginView app_name = 'study_system' urlpatterns = [
# 登录注册首页url
path('', 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, include urlpatterns = [
path("study_system/", include("study_system.urls")), # 应用urls
path('admin/', admin.site.urls), # admin后台管理 urls
]
第三步:运行测试-用户登录功能


-------------------------------------------------------------end -------------------------------------------------------------
Django实战项目-学习任务系统-用户登录的更多相关文章
- 「Django」rest_framework学习系列-用户登录
用户POST登录-->后台验证用户名密码-->验证正确返回TOKEN-->验证错误返回错误信息 class UserAPI(APIView): #用户登录类 def post(sel ...
- 转:C4项目中验证用户登录一个特性就搞定
转:C4项目中验证用户登录一个特性就搞定 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用 ...
- django项目学习之QQ登录
最近在用django框架写一个商城项目(前后端分离),里面用到的一些技术其他项目也可以借鉴,于是就想写一些博客记录,以防自己忘记,今天先写一个关于登录接口中引入QQ登录接口的流程. 关于QQ登录接口的 ...
- [Django实战] 第4篇 - 用户认证(用户登录)
今天来实现用户登录模块 首先,我们创建一个表单(forms.py): from django import forms from django.contrib.auth.models import U ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战
笔记 10.Springboot2.x用户登录拦截器开发实战 简介:实战开发用户登录拦截器拦截器 LoginInterceptor 1.实现接口 LoginI ...
- [Django实战] 第3篇 - 用户认证(初始配置)
当大家打开一个网站时,第一步做什么?大部分一定是先登录吧,所以我们就从用户认证开始. 打开用户认证 Django本身已经提供了用户认证模块,使用它可以大大简化用户认证模块的开发,默认情况下,用户认证模 ...
- Django ---- blog项目学习所得
一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...
- Flask学习之五 用户登录
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins 中文翻译地址:http:// ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- [Django实战] 第5篇 - 用户认证(修改密码)
上一篇我们实现了用户认证系统的登录模块,这一篇实现修改密码模块. 同样地,我们首先得给修改密码创建表单(forms.py): class ChangepwdForm(forms.Form): oldp ...
随机推荐
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v7.0版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持 UDP .TCP .WebSocket 三种协议,支持 iOS ...
- [炼丹术]YOLOR目标检测训练模型学习总结
YOLOR目标检测训练模型学习总结 性能测试 python test.py --data data/cocoaml --img 320 --batch 8 --conf 0.001 --iou 0.6 ...
- java解析CSV文件三种方法(openCSV)
一.简介1.pom.xml<!-- csv文件解析依赖 --><dependency> <groupId>com.opencsv</groupId> & ...
- 直播预览层添加滤镜效果(CIFilter使用场景)
直播预览层添加滤镜效果 原理,在显示之前,提前对图片进行滤镜处理,把处理后的图片展示出来就好了. CIFiter(滤镜类):给图片添加特殊效果(模糊,高亮等等). CIFiter滤镜分类(一个滤镜可能 ...
- w3cschool-Docker 入门到实践
https://www.w3cschool.cn/reqsgr/ 什么是 Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 ...
- 多方安全计算(6):MPC中场梳理
学习&转载文章:多方安全计算(6):MPC中场梳理 前言 诚为读者所知,数据出域的限制约束与数据流通的普遍需求共同催生了数据安全计算的需求,近一两年业界又统将能够做到多方数据可用不可见的技术归 ...
- AI定制祝福视频,广州塔、动态彩灯、LED表白,直播互动新玩法(附下载链接)
在追剧的时候经常能看到一些浪漫的告白桥段,男主用圣诞彩灯表白.用城市标志性建筑的LED表白,或者在五光十色的烟花绽放后刻下女主角的名字,充满了仪式感和氛围感~ 现在,这样的表白效果用AI软件就能实现了 ...
- 共促数字经济高质量发展,天翼云出席2024 IDC中国年度盛典!
9月11日,2024 IDC中国年度盛典暨颁奖典礼在上海盛大启幕.本次峰会以「AI时刻,欢迎来到下一个大事件」为主题,汇聚行业专家.意见领袖,深度探讨生成式AI.中国企业出海.创新业务模式.科技可持续 ...
- Jenkins Job中衍生进程存活难题及解决方案
Jenkins Job中衍生进程存活难题及解决方案 场景介绍 在Jenkins中创建了一个Job,假设你在一系列Build Step之前或之后启动了一个进程,例如启动一个Jboss进程.在Build完 ...
- FLink14--核心窗口--TumblingWindiwApp
一.依赖 https://www.cnblogs.com/robots2/p/16048648.html 二. 代码 前言:window用作有keyBy情况,前面没有使用keyBy的话用windowA ...