Django学习小记2-用户登录实例

首先回顾上节的Django三个基础函数:

from django.shortcuts import HttpResponse   #返回字符串
from django.shortcuts import render    #给他一个数据,再给他一个模板 来渲染后返给用户
from django.shortcuts import redirect   #跳转到某个地址

 

因为request中包含用户请求相关的所有信息(对象),所以可以通过

request.method来看请求的方法【GET\POST】
题外话:GET是以URL的形式传递数据,不安全。
print(request.method)

所以基于此,就可以作为判断,提取用户post提交的表单数据:

    if request.method == "GET":
        return render(request,'login.html')
    else:
        #用户POST提交的数据
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        if u == 'admin' and p == 'admin':
            #登录成功跳转
            return redirect('http://www.baidu.com')
        else:
            #登录失败
            return render(request,'login.html')

login.html配置:

<form method="POST" action="/login/">

这时候我们发现确实实现的登陆控制,但是没有登陆失败提示啊~!!!

这就用到 {{ msg}}

这个是在html中容载特殊字符的,若没有给他传值,django就不显示。

login.html中:
...
<input type="submit" value="登录"/><br>
  {{ msg }}

---------------------
urls.py中:

...
        else:
            #登录失败
            return render(request,'login.html',{'msg':'用户名或密码错误!'})

其实这个{{ msg}} 就是模板引擎中的特殊标记

除了字符串外,还支持列表字典循环等的特殊标记取值

return render(request,'index.html',{...})
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>日志文档填写title>
head>
<body>
<h1>归档日志填写:h1>
        <p>{{ name }}p>
        <p>{{ users.0 }}p>
        <p>{{ users.1 }}p>
        <p>{{ user_dict.k2 }}p>

        <h3>循环h3>
        {% for item in users %}
            <h4>{{ item }}h4>
        {% endfor %}

       <ul>
        {% for item in users %}
            <li>{{ item }}li>
        {% endfor %}
        ul>
body>
html>

urls.py的配置:

def index(request):
    return render(
        request,
        'index.html',
        {
            'name':'tom',
            'users':['王牡丹','香农'],
            'user_dict':{'k1':'v1','k2':'v2'},
        }
    )

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('login/',login),
    path('index/',index),
]

Django学习小记2-用户登录实例_第1张图片

 

 注意:

  • 特殊标记可以为列表和字典,用 · 来索引取值;
  • 特殊标记作为循环时,可以连同标签一块循环,也可以单独循环。

 使用场景举例:

 接上面index.html:

模板源进行渲染可以加列表加表格增删操作之

...
     <ul>
        {% for row in user_dict %}
            <li>{{ row.id }}--{{row.name}}--{{ row.email }}li>
        {% endfor %}
        ul>

        <table border="1">
        {% for row in user_dict %}
            <tr>
                <td>{{ row.id }}td>
                <td>{{ row.name }}td>
                <td>{{ row.email }}td>
                <td>
                    <a>编辑a>|<a href="/del/?nid={{ row.id }}">删除a>
                td>
            tr>
        {% endfor %}
        table>

相当于对列表元素进行循环,每一项又是一个字典,所以可以用哪个row.id ...

接上面urls.py 修改为:

...
def index(request):
    return render(
        request,
        'index.html',
        {
            'user_dict':[
                {'id':'1','name':'shannon','email':'[email protected]'},
                {'id': '2', 'name': 'yunz', 'email': '[email protected]'},
                {'id': '3', 'name': 'tom', 'email': '[email protected]'},
            ]
        }
    )

执行:

Django学习小记2-用户登录实例_第2张图片

 一定注意索引用 · 获取

 


 

  Django学习小记2-用户登录实例_第3张图片

 

 【网络铅笔头,扫一扫~】

附录1:实验登陆 login.html

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录 title>
    <link rel="stylesheet" href="/static/common.css" />
head>
<body style="background-color:PowderBlue;">
    <h1>用户登录入口h1>
    <form method="POST" action="/login/">

        用户名:<br>
        <input type="text"  name="user" required autofocus placeholder="username"><br>
        密码:<br>
        <input type="password" name="pwd" maxlength="12" placeholder="password"><br><br>
        <input type="submit" value="登录"/><br>
        {{ msg }}
    form>
body>
html>

附录2:实验urls.py

from django.contrib import admin
from django.urls import path

from django.shortcuts import HttpResponse,render,redirect
def login(request):
    '''
    处理用户请求并返回内容
    :param request:用户请求相关的所有信息(对象)
    :return:
    '''
    #return HttpResponse('')
    if request.method == "GET":
        return render(request,'login.html')
    else:
        #用户POST提交的数据
        u = request.POST.get('user')
        p = request.POST.get('pwd')
        if u == 'admin' and p == 'admin':
            #登录成功跳转
            #return redirect('http://www.baidu.com')
            return redirect('/index/')
        else:
            #登录失败
            return render(request,'login.html',{'msg':'用户名或密码错误!请重新输入'})

def index(request):
    return render(request,'index.html')

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('login/',login),
    path('index/',index),
]

你可能感兴趣的:(Django学习小记2-用户登录实例)