python_Django簡單的登入頁面

weixin_33727510發表於2017-11-27

一、命題

是做一個有技術的黑盒測試,還是做一個黑盒測試,這個是一個為了帶Django初學者更容易認識這個框架的小例子

1.1偽造響應資訊

6692028-0f2ac3ad6e0e4297.png
image.png

瀏覽器執行結果


6692028-a98baf11d557f48c.png
image.png

二、建立

根據Django的MTV 模式,我們先輸入指令建立
app :python manage.py startapp cmdb
這裡的app意思就是程式模組
如圖我們建立的一個基礎框架


6692028-d298f53f437d2e1e.png
image.png

獲取更多的返回資訊request.environ

 for k,v in request.environ.items():
        print(k,v)
6692028-908f2183f4195493.png
image.png

三、編寫

在templates 檔案下建立 login.html,寫一個表單提交

<form action="login" method="post">
    <table>
        <tr>
            <td><label for="user">使用者名稱</label></td>
            <td><input type="text" name="user" id="user"></td>
        </tr>
        <tr>
            <td><label for="pwd">密碼</label></td>
            <td><input type="password" name="pwd" id="pwd"></td>
            <span style="background: red"></span>
        </tr>
        <tr>
            <td ><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>

我們現在J_Login檔案下的urls.py,寫上url的條件對映對應的處理函式

#引入邏輯處理模組
from  cmdb import  views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    #建立對映關係
    url(r'^login', views.login),
]

ulr的對映我們寫好後,開始寫使用者提交到頁面的程式碼邏輯處理,也就是在我們建立app模組下 views裡面寫。這裡的app模組指的是cmdb

from django.shortcuts import HttpResponse
from  django.shortcuts import  redirect

#建立url對應的函式對映
def login(request):
    #判斷是否是POST 返回
    if request.method == 'POST':
        #接受 html name 是user和pwd的標籤
        user = request.POST.get('user',None)
        pwd = request.POST.get('pwd', None)
        if user =='123' and pwd=='123' :
            #重定向百度
            return redirect('https://www.baidu.com')
        
    #去讀index,通過HTTpResponse 方法返回檔案內容
    with open('templates/index.html', 'rb' ) as f:
        data =f.read()
        f.close()
        return  HttpResponse(data)

上面的這種方式只是為了讓我們更加理解,工作原理,通過檔案的讀取,在頁面展示對應的讀取html,但實際生產生活中我們會用到下面這種,而不是用io來讀取展示 request.POST.get可以理解,去html找name名的標籤屬性{‘name’:‘user’}

下面是實際生產生活的寫法:
我們先在我們的提交表單的html加上一句話用{{}} 雙大括號 上

            <span style="background: red">{{ msg }}</span>

改動我們的view

from django.shortcuts import render
from  django.shortcuts import  redirect

#建立url對應的函式對映
def login(request):

    msg = ''
    #判斷是否是POST 返回
    if request.method == 'POST':
        #接受 html name 是user和pwd的標籤
        user = request.POST.get('user',None)
        pwd = request.POST.get('pwd', None)
        if user =='123' and pwd=='123' :
            #重定向百度
            return redirect('https://www.baidu.com')
        else:
            msg = '使用者名稱密碼錯'
            return render(request, 'index.html',{'msg':msg})

    #去讀index.html
    return render(request,'index.html',{'msg':msg})

之前我們用HttpResponse,通過檔案的讀寫返回,這把我們用render方法直接返回對應頁面,而且render方法中,可用字典的方式向頁面返回我們提前用雙大括號在頁面做好的標記位置返回值,但這個前提是我們在settings.py 的設定檔案做了設定


6692028-a2ff079e5c11c333.png
image.png

四、提升

光寫一個沒有資料庫的登入沒意思,我們在寫一個頁面,可以進行不通過資料庫的假資料使用者新增
我們在templates 資料夾下建立一個home.html

<form action="home" method="post">
    <input type="text" name='user' placeholder="使用者名稱">
    <input type="text" name="pwd" placeholder="密碼">
    <input type="submit">
</form>
{% for infos in user_info %}
<table>
    <tr>
        <td>使用者名稱</td>
        <td>{{ infos.u}}</td>
    </tr>
    <tr>
        <td>密碼</td>
        <td>{{infos.p}}</td>
    </tr>
</table>
{% endfor %}

在urls做關係對映

rom  cmdb import  views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    #建立對映關係
    url(r'^login', views.login),
    url(r'^home', views.home),
]

編寫home方法的程式碼

USER_LIST =[{'user':'w','pwd':'123'}]
def home(request):
    if request.method == 'POST':
       u = request.POST.get('user',None)
       p = request.POST.get('pwd',None)
       temp = {'user':u, 'pwd':p}
       USER_LIST.append(temp)
#返回字典在頁面展示
    return render(request,'home.html',{'user_List':USER_LIST})

(二)、字典傳值
view 層

USER_DICT={
        'k1':'v1',
        'k2':'v2',
    }

def test(request):
    return render(request,'test.html',{'user_dict':USER_DICT})

templates 模組

 <ul>
    <!-字典.k 列印出來的是value->
    {{ user_dict.k1 }}
        <!-字典.value 字典.key 字典.items->
        {% for k,v in user_dict.items %}
            <li>
                {{ k }}-{{v}}
            </li>
        {% endfor %}
    </ul>

字典的迴圈方法 跟python 一樣有value , key, items

相關文章