基于ORM实现用户登录

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最终效果

 

posted on 2017-09-14 11:39  momo8238  阅读(455)  评论(0编辑  收藏  举报