最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django認證系統(tǒng)實現(xiàn)的web頁面實現(xiàn)代碼

 更新時間:2019年08月12日 10:32:43   作者:Leslie-x  
這篇文章主要介紹了Django認證系統(tǒng)實現(xiàn)的web頁面實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

結合數(shù)據(jù)庫、ajax、js、Djangoform表單和認證系統(tǒng)的web頁面

一:數(shù)據(jù)模塊

擴展了Django中的user表,增加了自定義的字段

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
 phone = models.CharField(max_length=11)
 gender = models.CharField(max_length=2)

二:路由系統(tǒng)

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^register/',views.register),
 url(r'^login/',views.login_view),
 url(r'^home/',views.home),
 url(r'^logout/',views.logout_view),
 url(r'^modify_pwd/',views.modify_pwd),
 url(r'^$',views.home),
]

三:視圖系統(tǒng)

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.contrib.auth import authenticate, login,logout
from app01 import forms
from app01.models import UserInfo
# Create your views here.
def register(request):
 form_obj = forms.Reg_form()
 if request.method == 'POST':
  form_obj = forms.Reg_form(request.POST)
  if form_obj.is_valid():
   info_dic = form_obj.cleaned_data
   sex_dic = {'1':'男','2':'女','3':'保密'}
   info_dic['gender']=sex_dic[info_dic['gender']]

   UserInfo.objects.create_user(
    username=info_dic['username'],
    password = info_dic['pwd'],
    gender=info_dic['gender'],
    phone =info_dic['phone']
   )
   return redirect('/login/')
 return render(request, "register.html",{'form_obj':form_obj})


def login_view(request):
 if request.method == 'POST':
  username = request.POST.get('username')
  pwd = request.POST.get('pwd')
  user = authenticate(username=username, password=pwd)
  if user:
   login(request, user)
   data = {'code':1}
  else:
   data = {'code': 0,'msg':'用戶名或密碼錯誤'}
  return JsonResponse(data)
 return render(request, 'login.html')


@login_required
def logout_view(request):
 logout(request)
 return redirect('/login/')

@login_required
def home(request):
 user_id = request.session['_auth_user_id']
 use_obj = request.user
 return render(request,'home.html',{'user':use_obj})

@login_required
def modify_pwd(request):
 if request.method == 'POST':
  old_pwd = request.POST.get('old_pwd')
  pwd = request.POST.get('pwd')
  re_pwd = request.POST.get('re_pwd')
  user_obj = request.user
  if user_obj.check_password(old_pwd):
   if re_pwd == pwd:
    user_obj.set_password(pwd)
    user_obj.save()
    data = {'code': 1}
   else:
    data = {'code': 0, 'msg': '兩次輸入密碼不一致'}
  else:
   data = {'code': 0, 'msg': '原始密碼輸入錯誤'}
  return JsonResponse(data)
 return render(request,'modify_pwd.html')

四:form表單

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:YiJun
from django import forms
from app01 import models
from django.forms import widgets
from django.core.exceptions import ValidationError # 導入異常
import re
# Create your views here.
class Reg_form(forms.Form):
 # 用戶名表單
 username = forms.CharField(
  min_length=4,
  label="設置用戶名",
  error_messages={
   "required": "不能為空",
   "invalid": "格式錯誤",
   "min_length": "用戶名最少4個字符"
  },
  widget=widgets.TextInput(
   attrs={
    'class': "form-control",
    'placeholder': '用戶名'
   })
 )
 # 用戶密碼設置表單
 pwd = forms.CharField(
  min_length=6,
  label="設置密碼",
  widget=forms.widgets.PasswordInput(
   attrs={
    'class': 'form-control',
    'placeholder': '密碼'},
   render_value=True,
  ),
  error_messages={
   "required": "不能為空",
   "invalid": "格式錯誤",
   "min_length": "密碼至少6位"

  }
 )
 # 用戶密碼確認表單
 r_pwd = forms.CharField(
  min_length=6,
  label="確認密碼",
  widget=forms.widgets.PasswordInput(
   attrs={
    'class': 'form-control',
    'placeholder': '確認密碼'},
   render_value=True,
  ),
  error_messages={
   "required": "不能為空",
   "invalid": "格式錯誤",
   "min_length": "密碼至少6位"

  }
 )
 # 用戶性別選擇表單
 gender = forms.ChoiceField(
  choices=((1, "男"), (2, "女"), (3, "保密")),
  label="性別",
  initial=3,
  widget=forms.widgets.RadioSelect
 )
 # 用戶手機號碼表單
 phone = forms.CharField(
  label="手機號碼",
  max_length=11,
  min_length=11,
  error_messages={
   "required": "不能為空",
   "invalid": "格式錯誤",
   "min_length": "手機號碼至少11位",
   "max_length": "手機號碼最多11位",
  },
  widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '手機號碼'})
 )

 def clean_phone(self):
  value = self.cleaned_data['phone']
  expression = re.compile('^1[3589][0-9]{9}')
  if not expression.search(value).group():
   raise ValidationError('請輸入正確的手機號碼')
  else:
   return value
 def clean_username(self):
  value = self.cleaned_data['username']
  if models.UserInfo.objects.filter(username=value):
   raise ValidationError('用戶名已經(jīng)注冊')
  else:
   return value
 def clean(self):
  pwd = self.cleaned_data.get("pwd")
  r_pwd = self.cleaned_data.get("r_pwd")
  if pwd != r_pwd:
   self.add_error("r_pwd", "兩次輸入的密碼不一致!")
   # 兩次輸入的密碼不一致
   raise ValidationError("兩次輸入的密碼不一致!")
  else:
   self.cleaned_data.pop('r_pwd')
   return self.cleaned_data

五:模板系統(tǒng)

注冊頁面

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
   content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css" rel="external nofollow" >
 <title>Document</title>
</head>
<body>
<div class="container">
 <div class="row" style="margin-top: 50px">
  <div class="panel panel-primary">

   <div class="panel-heading"><h4>用戶詳細信息</h4></div>
   <div class="panel-body">

   </div>

   <!-- Table -->
   <div class="table-responsive">
    <table class="table table-bordered">
     <thead>
     <tr>
      <th>#</th>
      <th>用戶名</th>
      <th>手機號碼</th>
      <th>上次登陸時間</th>
      <th>注冊時間</th>
      <th>用戶性別</th>
     </tr>
     </thead>
     <tbody>
     <tr>
      <th scope="row">1</th>
      <td>{{ user.username }}</td>
      <td>{{ user.phone }}</td>
      <td>{{ user.last_login|date:'Y-m-d H:i:s' }}</td>
      <td>{{ user.date_joined|date:'Y-m-d H:i:s' }}</td>
      <td>{{ user.gender }}</td>
     </tr>
     </tbody>
    </table>
   </div>
  </div>
  <div style="margin-top: 20px">
   <a class="btn btn-info " href="/modify_pwd/" rel="external nofollow" >修改密碼</a>
   <a class="btn btn-danger pull-right" href="/logout/" rel="external nofollow" >注銷</a>
  </div>
 </div>
</div>
<script src="/static/jquery-3.3.1.min.js"></script>
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
home.html

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python使用 Beanstalkd 做異步任務處理的方法

    Python使用 Beanstalkd 做異步任務處理的方法

    這篇文章主要介紹了Python使用 Beanstalkd 做異步任務處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Python如何限制輸入的數(shù)范圍

    Python如何限制輸入的數(shù)范圍

    在Python中,我們可以使用多種方法來限制用戶輸入的數(shù)值范圍,今天通過實例代碼給大家分享Python限制輸入的數(shù)范圍,感興趣的朋友一起看看吧
    2024-05-05
  • 使用Python編寫簡單的畫圖板程序的示例教程

    使用Python編寫簡單的畫圖板程序的示例教程

    這篇文章主要介紹了使用Python編寫簡單的畫圖板軟件的示例教程,利用到了經(jīng)常被用來做游戲的pygame模塊,需要的朋友可以參考下
    2015-12-12
  • Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼

    Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼

    在項目開發(fā)中,有的應用程序可以運行在web瀏覽器,本文主要介紹了Python PyQt5模塊實現(xiàn)一個瀏覽器的示例代碼,分享給大家,感興趣的可以了解一下
    2021-07-07
  • matplotlib繪圖實例演示標記路徑

    matplotlib繪圖實例演示標記路徑

    這篇文章主要介紹了matplotlib繪圖實例演示標記路徑,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python的getattr函數(shù)方法學習使用示例

    Python的getattr函數(shù)方法學習使用示例

    這篇文章主要為大家介紹了Python的getattr方法學習使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Python中窗口操作的完整教程

    Python中窗口操作的完整教程

    在使用 Python 進行窗口操作時,可以執(zhí)行各種任務,如最大化、最小化、置頂窗口,本文將詳細介紹這些操作,并提供豐富的示例代碼,希望可以更好地幫助大家了解如何利用 Python 操縱窗口
    2023-11-11
  • 詳解python讀寫json文件

    詳解python讀寫json文件

    這篇文章主要為大家介紹了python讀寫json文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • opencv中圖像疊加/圖像融合/按位操作的實現(xiàn)

    opencv中圖像疊加/圖像融合/按位操作的實現(xiàn)

    這篇文章主要介紹了opencv中圖像疊加/圖像融合/按位操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 使用python繪制二元函數(shù)圖像的實例

    使用python繪制二元函數(shù)圖像的實例

    今天小編就為大家分享一篇使用python繪制二元函數(shù)圖像的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評論

福海县| 西乌珠穆沁旗| 双牌县| 望都县| 资阳市| 嵊州市| 民勤县| 家居| 连南| 五指山市| 正定县| 桦南县| 张家界市| 汪清县| 青岛市| 兴化市| 兴宁市| 天等县| 高邑县| 西安市| 景泰县| 浑源县| 台中县| 泾阳县| 天门市| 嘉黎县| 县级市| 阜宁县| 马公市| 石首市| 社旗县| 天津市| 资溪县| 阳曲县| 腾冲县| 吉安县| 哈密市| 武隆县| 大厂| 开鲁县| 墨竹工卡县|