1. 与数据库中的数据进行比较,检验用户名和密码是否正确。

2. 拿到的是QuerySet类型,类似于一个列表。验证成功/失败,返回到不同的页面。

u = request.POST.get('user') 
p = request.POST.get('pwd')
obj=models.UserInfo.objects.filter(username=u,password=p)
obj=models.UserInfo.objects.filter(username=u,password=p).first() #只拿第一个匹配的。
count=models.UserInfo.objects.filter(username=u,password=p).count()  #获取个数,如果为0,则表示没有匹配的。

3. 如果验证成功,则登陆后台管理页面

3.1写路由

3.2 写程序

3.3 写index模板

3.4测试效果

4. 查看用户信息

最终的呈现效果:

4.1 在urls.py中写对应关系

4.2 在views.py中写主体函数

views.py的全部函数如下,里面包含了验证用户名和密码的部分

from django.shortcuts import render,HttpResponse,redirect
def login(request):
if request.method=='GET':
return render(request,'login.html')
elif request.method=='POST':
#数据库中执行 select * from user where username='X' and password='Y'
u = request.POST.get('user')
p = request.POST.get('pwd')
obj = models.UserInfo.objects.filter(username=u, password=p).first()
if obj:
return redirect('/cmdb/index/')
else:
return render(request,'login.html')
else:
return redirect('/index/') def index(request):
return render(request,'index.html') def user_info(request):
user_list=models.UserInfo.objects.all()
#QuerySet列表类型[obj,obj,obj]
return render(request, 'user_info.html',{'user_list':user_list}) def user_detail(request,nid):
obj=models.UserInfo.objects.filter(id=nid).first()
#取单条数据,如果不存在,直接报错。
#models.UserInfo.objects.get(id=nid)
return render(request,'user_detail.html',{'obj':obj}) from app01 import models
def orm(request):
#增,创建方法1
#models.UserInfo.objects.create(username='root',password='123')
# 增,创建方法2
#dic={'username':'eric','password':'666'}
#models.UserInfo.objects.create(**dic)
# 增,创建方法3
#obj=models.UserInfo(username='alex',password='123')
#obj.save()
#查
#result1=models.UserInfo.objects.all()
#result2 = models.UserInfo.objects.filter(username='root')
#all表示把这个表中的所有数据都拿到。
# 返回的result是QuerySet类型的,这个类型是Django提供的。可以把QuerySet理解成是个列表[]。
#[obj(id,username,password),obj(id,username,password),obj(id,username,password)] #删除-所有数据
#models.UserInfo.objects.all().delete()
#删除-某些数据
#models.UserInfo.objects.filter(id=4).delete() #更新
models.UserInfo.objects.all().update(password=6669)
for row in result1:
print(row.id,row.username,row.password)
print(result1)
return HttpResponse('orm')

4.3在templates下写html模板

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/cmdb/login/" method="POST" enctype="multipart/form-data">
<p>
<input type="text" name="user" placeholder="用户名"/>
</p>
<p>
<input type="text" name="pwd" placeholder="密码"/>
</p>
<input type="submit" value="提交"/>
</form>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin:0;
}
.menu{
display:block;
padding:5px;
}
</style>
</head>
<body>
<div style="height:48px;background-color:black;color:white">
欢迎登陆教育系统
</div>
<div>
<div style="position:absolute;top:48px;bottom:0;left:0;width:200px;background-color:brown;">
<a class="menu" href="/cmdb/user_info/">用户管理</a>
<a class="menu" href="/cmdb/user_group/">用户组管理</a>
</div>
</div>
<div style="position:absolute;top:48px;left:210px;bottom:0;right:0;overflow:auto"> </div> </body>
</html>

user_info.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin:0;
}
.menu{
display:block;
padding:5px;
}
</style>
</head>
<body>
<div style="height:48px;background-color:black;color:white">
欢迎登陆教育系统
</div>
<div>
<div style="position:absolute;top:48px;bottom:0;left:0;width:200px;background-color:brown;">
<a class="menu" href="/cmdb/user_info/">用户管理</a>
<a class="menu" href="/cmdb/user_group/">用户组管理</a>
</div> <div style="position:absolute;top:48px;left:210px;bottom:0;right:0;overflow:auto">
<h3>用户列表</h3>
<ul>
{% for row in user_list %}
<li><a href="/cmdb/userdetail-{{row.id}}/">{{row.username}}</a></li>
{% endfor %}
</ul> </div>
</div>
</body>
</html>

user_detail.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin:0;
}
.menu{
display:block;
padding:5px;
}
</style>
</head>
<body>
<div style="height:48px;background-color:black;color:white">
欢迎登陆教育系统
</div>
<div>
<div style="position:absolute;top:48px;bottom:0;left:0;width:200px;background-color:brown;">
<a class="menu" href="/cmdb/user_info/">用户管理</a>
<a class="menu" href="/cmdb/user_group/">用户组管理</a>
</div> <div style="position:absolute;top:48px;left:210px;bottom:0;right:0;overflow:auto">
<h1>用户详细信息</h1>
<h5>{{obj.id}}</h5>
<h5>{{obj.name}}</h5>
<h5>{{obj.password}}</h5>
</div>
</div>
</body>
</html>

5.增加信息

5.1 对应关系不用修改,修改函数如下:

为了避免重复代码,也可以用redirect函数

5.2 修改user_info.html 模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin:0;
}
.menu{
display:block;
padding:5px;
}
</style>
</head>
<body>
<div style="height:48px;background-color:black;color:white">
欢迎登陆教育系统
</div>
<div>
<div style="position:absolute;top:48px;bottom:0;left:0;width:200px;background-color:brown;">
<a class="menu" href="/cmdb/user_info/">用户管理</a>
<a class="menu" href="/cmdb/user_group/">用户组管理</a>
</div> <div style="position:absolute;top:48px;left:210px;bottom:0;right:0;overflow:auto">
<h3>添加用户</h3>
<form method="POST" action="/cmdb/user_info/">
<input type="text" name="user"/>
<input type="text" name="pwd"/>
<input type="submit" name="添加"/>
</form>
<h3>用户列表</h3>
<ul>
{% for row in user_list %}
<li><a href="/cmdb/userdetail-{{row.id}}/">{{row.username}}</a></li>
{% endfor %}
</ul> </div>
</div>
</body>
</html>

5.3 效果:

6. 增加删除的功能。

6.1增加对应关系

6.2修改程序

6.3 更新模板

6.4测试效果

7.编辑

7.1 写对应关系

7.2程序

7.3 模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin:0;
}
.menu{
display:block;
padding:5px;
}
</style>
</head>
<body>
<div style="height:48px;background-color:black;color:white">
欢迎登陆教育系统
</div>
<div>
<div style="position:absolute;top:48px;bottom:0;left:0;width:200px;background-color:brown;">
<a class="menu" href="/cmdb/user_info/">用户管理</a>
<a class="menu" href="/cmdb/user_group/">用户组管理</a>
</div> <div style="position:absolute;top:48px;left:210px;bottom:0;right:0;overflow:auto">
<h1>编辑用户</h1>
<form method="post" action="/cmdb/useredit-{{obj.id}}/">
<input style="display:none" type="text" name="id" value="{{obj.id}}"/>
<input type="text" name="username" value="{{obj.username}}"/>
<input type="text" name="password" value="{{obj.password}}"/>
<input type="submit" value="提交"/>
</form> </div>
</div>
</body>
</html>

7.4最终效果

基于ORM实现用户登录的更多相关文章

  1. 基于jwt的用户登录认证

    最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...

  2. Django - 基于orm实现用户增删改查

    1.基于orm实现用户新增 user_info.html中,增加代码: views.py中,在原user_info函数中,增加判断代码: 备注:最后一句,可以通过return redirect 实现, ...

  3. 基于cookie的用户登录状态管理

    cookie是什么 先来花5分钟看完这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 看完上文,相信大家对cookie已经有 ...

  4. 基于Struts2的用户登录程序

    基本步骤: 1.新建Java工程,File>New>Project>Web>Dynamic Web Project,并将工程命名为:Struts2_Demo 2.导入strut ...

  5. 【原创】基于Memcached 实现用户登录的Demo(附源码)

    一个简单的Memcached在Net中运用的一个demo.主要技术 Dapper+MVC+Memcached+sqlserver, 开发工具为vs2015+Sql 效果图如下: 登录后 解决方案 主要 ...

  6. asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架

    整体框架: 一.搭建Model层 1.添加通用数据访问类 2.添加实体类(封装和传递数据,和数据库中数据表对应) 3.添加数据访问类(通常和实体类同名,但是后缀名发生改变) 二.搭建控制器层Contr ...

  7. YII学习,实现基于数据库的后台登录,用户体系.

    上次研究Yii框架写到了要完成用户登陆系统.这次接着上次的写. 参考官方权威指南和参考手册,外加各种博客文章.历尽千辛万苦,数遍天上滴星星.完成了后台用户登录.这里用到了YII框架的 CUserIde ...

  8. 【Qt编程】基于Qt的词典开发系列&lt;八&gt;--用户登录及API调用的实现

    在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...

  9. SSH——基于BaseDao和BaseAction实现用户登录

           基于BaseDao和BaseAction实现用户登录  1. 首先修改login.jsp页面,点击登录按钮,提交表单 <a onclick="document.forms ...

随机推荐

  1. RHCSA-考前准备

    1.考前准备 RHCSA classroom虚拟机和server虚拟机 将两台虚拟机切换到初始化快照 打开虚拟机电源,当出现提示时选择我已移动该虚拟机 系统密码: classroom: root As ...

  2. CF 1064 D. Labyrinth

    D. Labyrinth http://codeforces.com/contest/1064/problem/D 题意: n*m的矩阵,只能往左走l次,往右走r次,上下走无限制,问能走到多少个点. ...

  3. jQuery File Upload 文件上传插件使用二 (功能完善)

    使用Bootstrap美化进度条 Bootstrap现在几乎是人尽皆知了,根据它提供的进度条组件, 让进度条显得高大尚点 正因为其功能强大,js模块文件之间牵连较深 不好的地方耦合度非常高 重要的参数 ...

  4. Spark Shell Examples

    Spark Shell Example 1 - Process Data from List: scala> val pairs = sc.parallelize( List( ("T ...

  5. python—2.x中如何使用中文

    python2.x 默认使用ASCII编码格式 python3.x 默认使用UTF-8编码格式 在python2.x文件的第一行增加一下代码,解释器会以utf-8编码来处理python文件. # *_ ...

  6. 20162316刘诚昊 第八周实验报告:实验二 Java面向对象程序设计

    实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<L ...

  7. Java变量声明,实例化,问题

    1.变量在输出前必须实例化,这是因为只有声明,没有分配内存空间 在这种情况下会报错 2.实例化后,尽管没有赋值,可能是默认了吧,但也不会输出null,什么也没有输出 上面的理解可能是错的,a赋值了,就 ...

  8. OA--对于每个form表单(<s:iterator>生成)的处理

    由于是后台传过来的,我们不知道form 有几个 也不能指定form的id和name,(其实也可以就是可能会冲突我们还是用下面讲的方法把) 之前有想过 对于每个form 里面都有一些参数,举个例子 项目 ...

  9. 划分树---hdu4417---区间查找(不)大于h的个数

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 Super Mario Time Limit: 2000/1000 MS (Java/Others)    ...

  10. 图论---POJ 3660 floyd 算法(模板题)

    是一道floyd变形的题目.题目让确定有几个人的位置是确定的,如果一个点有x个点能到达此点,从该点出发能到达y个点,若x+y=n-1,则该点的位置是确定的.用floyd算发出每两个点之间的距离,最后统 ...