1. 程式人生 > >django2.2練習實現使用者模擬登入

django2.2練習實現使用者模擬登入

cat views.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from . import models

def index(request):
    if not request.session.get('is_login',None):
        return redirect('/login/')
    # return HttpResponse('Hello, world. You\'re at the polls index.')
    return render(request,'index.html')

def login(request):
    if request.session.get('is_login',None):
        return redirect('/')
    if request.method == "POST":
        user = request.POST.get('username')
        password = request.POST.get('password')
        message='請檢查填寫內容!'
        print('------user:%s,password:%s------'%(user,password))
        if user.strip() and password:
            try:
                u=models.User.objects.get(user=user)
                #a=models.table_name.objects.get(xx=xx,yy=yy)
                #返回一個數據物件.獲取資料物件的某一個屬性欄位值通過點的方式獲取如:
                print('---資料庫使用者:%s,密碼:%s,註冊日期:%s'%(u.user,u.passwd,u.c_time))
            except Exception as f:
                print(f)
                message = '使用者不存在!'
                return render(request,'login/login.html',{'message':message})
            if u.passwd == password:
                request.session['is_login'] = True
                request.session['user_id'] = u.id
                request.session['user_name'] = u.user
                request.session['user_email'] = u.email
                return redirect('/')
            else:
                message = '密碼不正確'
                return render(request,'login/login.html',{'message':message})
        return render(request,'login/login.html',{'message':message})
    return render(request,'login/login.html')

#通過下面的if語句,我們不允許重複登入:
# if request.session.get('is_login',None):
#     return redirect("/")

# request.session['is_login'] = True
# request.session['user_id'] = user.id
# request.session['user_name'] = user.name


def register(request):
    if request.session.get('is_login',None):
        return redirect('/')
    if request.method == 'POST':
        user = request.POST.get('username')
        password1 = request.POST.get('passwd1')
        password2 = request.POST.get('passwd2')
        email = request.POST.get('email')
        sex = request.POST.get('sex')
        print('user:%s,password1:%s,password2:%s,email:%s,sex:%s'%(user,password1,password2,email,sex))
        if password1 != password2:
            message='兩次密碼不相同'
            return render(request,'login/register.html')
        else:
            sameuser = models.User.objects.filter(user=user)
            if sameuser:
                message='該使用者已經存在'
                return render(request,'login/register.html')
            sameemail =models.User.objects.filter(email=email)
            if sameemail:
                message='該郵箱已經被註冊了'
                return render(request,'login/register.html')  
                          #django的操作資料庫get方法是從資料庫的取得一個匹配的結果,返回一個物件,如果記錄不存在的話,它會報錯。             #django的操作資料庫filter方法是從資料庫的取得匹配的結果,返回一個物件列表,如果記錄不存在的話,它會返回[]。             models.User.objects.create(user=user,passwd=password1,email=email,sex=sex)             return redirect('/login/')     return render(request,'login/register.html')
def logout(request):     if not request.session.get('is_login',None):         return redirect('/login/')     request.session.flush()     return redirect("/login/")

cat index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>
<h1>{{ request.session.user_name }}!歡迎回來</h1>
<a>登入狀態:{{ request.session.is_login }}</a><br>
<a>使用者名稱稱:{{ request.session.user_name }}</a><br>
<a>使用者郵箱:{{ request.session.user_email }}</a><br>
<p>
    <a href="/logout/">登出</a>
</p>
</body>
</html>

cat register.html

<!DOCTYPE html>
<html>
<head>
    <title>歡迎註冊</title>
</head>
<body>
    <form action="/register/" method="POST">
        {% csrf_token %}
        <!--對錶單進行csrf驗證加持,防止跨站請求偽造-->
        <label>賬號:<input type="text" name="username" value=""></label>
        <br>
        <label>密碼:<input type="password" name="passwd1" value=""></label>
        <br>
        <label>重新輸入密碼:<input type="password" name="passwd2" value=""></label>
        <br>
        <label>郵箱:<input type="text" name="email" value=""></label>
        <br>
        <label>性別</label>
        <select name="sex">
            <option value='male'>男</option>
            <option value='female'>女</option>
        </select>
        <input type="submit" value="註冊">
        <a href="/login/"  ><ins>直接登入</ins></a>
    </form>
</body>
</html>

cat login.py

<!DOCTYPE html>
<html>
<head>
    <title>登陸</title>
</head>
<body> 
    <div  style = "margin:15%40%;" > 
       <h2>歡迎登入!</h2 >

       <form  action = "/login/"  method ="post">
            {% if message %}
            <div class="alert alert-warning">{{ message }}</div>
            {% endif %}
            {% csrf_token %}
            <label  for="id_username">使用者名稱:</label><input  type="text" id ="id_username"  name="username" required/>
            <br>
            <label for= "id_password">密碼:</label><input type="password" id="id_password" placeholder="密碼" name="password" required>
            <br>
            <input type ="submit"  value ="登入">
            <a href="/register/" class="text-success " ><ins>新使用者註冊</ins></a>
        </form >
    </div>
</body>
</html>

cat models.py

from django.db import models

class User(models.Model):
    gender = (('male','男'),('female','女'))
    user = models.CharField(verbose_name=u'姓名',max_length=128,unique=True)
    passwd = models.CharField(verbose_name=u'密碼',max_length=128)
    email = models.EmailField(verbose_name=u'郵箱',unique=True)
    sex = models.CharField(verbose_name=u'性別',max_length=32,choices=gender,default="男")
    c_time = models.DateTimeField(verbose_name=u'建立時間',auto_now_add=True)
    mod_date = models.DateTimeField(verbose_name=u'修改日期', auto_now=True)
    def __str__(self):
        return self.user

    class Meta:
        ordering = ['-c_time']
        db_table = 'User'
        verbose_name = '使用者表[User]'
        verbose_name_plural = '使用者表[User]'
    #verbose_name=u'姓名',用於在admin介面新增正好時友好顯示。不寫新增賬號會顯示:欄位名稱
    #unique唯一性
    #auto_now無論是你新增還是修改物件,時間為你新增或者修改的時間。
    #auto_now_add為新增時的時間,更新物件時不會有變動。
    #choice只能選擇'男'或者'女'.預設為男
    #__str__是python的一個魔幻方法。作用於django管理介面用於將資料庫中的記錄展示為易讀的字串。
    #Meta類用於定義表名稱。預設表名稱為'app名稱_表名稱',db_table用於指定表名
    #ordering 用於指定一個欄位,按照升序或降序對資料進行排序。指定的欄位名稱前加'-'表示遞減,若沒有加表示升序,若加'?'表示隨機.
    #verbose_name用於在admin介面單數顯示,verbose_name_plural複數形式顯示。中文單數複數一般不做區別。
    #verbose類似於User表在admin介面的顯示形式。類似於別名

cat app下urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index,name='index'),
]

cat 專案urls.py

from django.contrib import admin
from django.urls import path,include
from Registration import views
urlpatterns = [
    path('',include('Registration.urls')),
    path('admin/', admin.site.urls),
    path('Registration/',include('Registration.urls')),
    path('login/',views.login),
    path('register/',views.register),
    path('logout/',views.logout),
    path('captcha/', include('captcha.urls')),
]

相關推薦

django2.2練習實現使用者模擬登入

cat views.py from django.shortcuts import render,redirect from

django2.2 使用者登入練習完整版(待改善)

主要配置: settings.py配置: #資料庫配置 import pymysql pymysql.install_as

模擬登入簡單程序---2018.2.24

() while 輸入 被鎖 成功 pri -- 失敗 重新 with open(‘zhanghaomima‘,‘r‘,encoding=‘utf8‘) as f_read: file_dict = eval(f_read.read().strip()) i=0

No.16 程式碼練習:折半查詢,模擬登入,大小寫轉換

學習不易,需要堅持。 1.寫程式碼可以在整型有序陣列中查詢想要的數字, 找到了返回下標,找不到返回-1.(折半查詢) 2.編寫程式碼模擬三次密碼輸入的場景。 最多能輸入三次密碼,密碼正確,提示“登入成功”,密碼錯誤, 可以重新輸入,最多輸入三次。三次均錯,則提示退出程式。 3.編

pyhon3模擬登入百度(2)—— 使用IE11理清百度登入內部邏輯和分析請求傳送資料

依照思路來,第一步就是難點和重點,搞清楚了網頁登入的內部邏輯,才能進行下一步的模擬登入。 這裡,我的瀏覽器是IE11。因為已經看了一篇手把手教學分析登入邏輯的文章,所以這裡寫的要節省多了。 通過分析發現登入的網址是https://passport.baidu.com

Python練習專案——模擬ATM機登入系統

一、題目要求: 通過Python程式設計完成一個銀行ATM機模擬系統,具備如下功能: (1)登陸驗證:使用者輸入使用者名稱密碼登陸,檢測使用者名稱是否存在以及使用者名稱密碼是否匹配;使用者名稱密碼各有三次輸入機會,超過三次系統退出。 (2)選單介面:登陸成功後顯示功能操作介

Python3爬蟲學習筆記1.2——模擬登入

歡迎捧場,上一篇我們學習了urllib官方庫的一些使用方法,今天的主要工作內容是利用Python來模擬登入網站,我們選擇用知乎做實驗,前一段時間登入知乎好像需要驗證碼,現在又可以直接登陸了,比較簡單,也有各網站登入的普遍性,而且傳輸的過程中沒有對使用者名稱和密碼

Python模擬登入豆瓣網,並爬取小組信息

count alias pass spa .post windows chrome apr ror import requests from bs4 import BeautifulSoup from PIL import Image headers = { ‘

selenium 模擬登入知乎和微博

sleep https epo element select selenium clas .com -c pip install selenium __author__ = ‘admin‘ __date__ = 2017 / 11 / 3 from selenium im

Python練習模擬用戶登錄接口

python 登錄 運維 模擬登錄 練習 實現需求如下:同一個用戶名連續失敗三次則鎖定,不管用戶名是否在,鎖定後在下次運行腳本登錄是同樣是鎖定狀態使用文件存儲用戶名和密碼信息,與文件裏面的用戶名密碼進行認證對比用戶名不存在和密碼錯誤提示不可以相同,登錄成功,賬號被禁用,密碼錯誤,用戶不存在

6.2練習

打印 python 方式 cnblogs http 你在 6.2 現實 rst 1使用一個字典來存儲一個熟人的信息,包括名、姓、年齡和居住的城市。該字典應包含鍵first_name 、last_name 、age 和city 。將存儲在該字典中 的每項信息都打印出來。 詞

【ccf2017-12-2】遊戲(模擬)

個人感悟 num pos main clu div 參加 開始 給定 問題描述   有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n號小朋友的順時

SPFA算法的SLF優化 ——loj#10081. 「一本通 3.2 練習 7」道路和航線

。。 loj dijkstra 分享 spa 思想 text 超時 我見 今天做到一道最短路的題,原題https://loj.ac/problem/10081 題目大意為給一張有n個頂點的圖,點與點之間有m1條道路,m2條航線,道路是雙向的,且權值非負,而航線是單向的,權值

Java 關於生成WebService客戶端以及服務端存在賬號密碼登入如何通過程式碼模擬登入解決方案

首先,這篇文章主要是用來做一個記錄,方便以後使用,所以不會有太多關於webService以及wsdl的一些原理上的講解,主要是為了解決實際問題,即:如何生成webService客戶端去呼叫服務端,以及當服務端需要進行賬號密碼登入時,我們該如何模擬登入,來繼續呼叫裡面的介面。 主

Java 小練習—使用者註冊登入(含異常處理 )

需求: A: 請選擇要使用的功能 1. 登入 請輸入賬號 請輸入密碼 呼叫 B 的方法獲取登入結果 登入成功/登入失敗 2. 註冊 請輸入賬號 請輸入密碼 呼叫 B 的方法獲取註冊結果 註冊成功/註冊失敗

18.11.2紹一模擬

T1 Alice 的幸運數 題意 給定n(n\le 100)個64位無符號整數(有順序)。 我們可以對每個數取反,然後按順序執行按位與\(nbsp或者\)nbsp按位或\(nbsp或者\)nbsp按位異或。 求最後結果的最小值。 分析 我們發現要使結果最小,高位儘量取0。 打個爆搜。。 發現n很大的時

23.模擬登入cookies請求速詢網站資料

採集速詢網站資料:網站地址:http://www.suxun0752.com/index.html網站是需要賬號登入才給返回資訊的,我這裡是直接拿的登入後的cookies請求的資料,cookies我也給了註釋,沒做深層的採集只是試採集了某一月份的。簡單分析一下 :1.首先要先拿到cookies這樣你才有

詳解教務系統模擬登入與爬取二

版權宣告:本文為博主原創文章,轉載 請註明出處:https://blog.csdn.net/sc2079/article/details/82564284 - 寫在前面   上篇部落格教務系統模擬登入與成績爬取對教務處成績成功爬取並將資料儲存在JSON,這篇部落格就實現查詢成績

教務系統模擬登入與成績爬取一

版權宣告:本文為博主原創文章,轉載 請註明出處 https://blog.csdn.net/sc2079/article/details/82563854 -寫在前面   暑假期間學校的學生教務系統大改,好多以前的微信公共號的爬蟲都不能用了。想快速查成績怎麼辦呢?哎,自己動手豐

python使用sessions模擬登入淘寶

之前想爬取一些淘寶的資料,後來發現需要登入,找了很多的資料,有個使用request的sessions加上cookie來登入的,cookie的獲取在登入後使用開發者工具可以找到。不過這個登入後獲得的網頁的程式碼是靜態的,獲取動態網頁還得另尋他法,一般需要的資料可以在網頁的原始碼中得到,但是你知道的,有些動態載入