您當前的位置:首頁 > 曲藝

「入行全棧 Django3.x 個人主頁網站全記錄」3.使用者應用開發

作者:由 Mr資料楊 發表于 曲藝時間:2021-09-03

專案彙總

內容介紹

User 後臺功能開發和配置。

其中專案中資料遷移部分不做說明,執行CMD命令。

python manage。py makemigrations

# 遷移到我們資料庫

python manage。py migrate

# 同步到資料庫

內容展示

「入行全棧 Django3.x 個人主頁網站全記錄」3.使用者應用開發

「入行全棧 Django3.x 個人主頁網站全記錄」3.使用者應用開發

「入行全棧 Django3.x 個人主頁網站全記錄」3.使用者應用開發

應用建立&配置

1.建立應用

進入檔案根目錄執行CMD命令建立新聞資訊應用,並將建立好的應用資料夾移動到目錄的apps下即可。

cd

MyHome

python manage。py startapp User

將建立好的應用資料夾移動到目錄的apps下即可

2.配置應用模組

在settings。py檔案中修改

INSTALLED_APPS

=

。。。

# 新增文章應用

‘apps。User’

3.不需要修改該的檔案

admin.py

這個我們使用xadmin代替的原有版本的admin,因此這個檔案不需要修改該

apps.py

應用的配置檔案,不需要動

test.py

測試執行指令碼,不需要動

應用 models。py

# coding:utf-8

from

django。db

import

models

from

django。utils

import

timezone

from

django。contrib。auth。models

import

AbstractUser

# 使用者列表模型

class

UserProfile

AbstractUser

):

actual_name

=

models

CharField

max_length

=

10

verbose_name

=

“使用者姓名”

null

=

True

blank

=

True

unique

=

False

nick_name

=

models

CharField

max_length

=

20

verbose_name

=

“使用者暱稱”

null

=

True

blank

=

True

unique

=

False

GENDER_CHOICES

=

“Male”

“男性”

),

“Female”

“女性”

),

“Undefined”

“未定義”

gender

=

models

CharField

max_length

=

9

verbose_name

=

“使用者性別”

choices

=

GENDER_CHOICES

default

=

“未定義”

birthday

=

models

DateField

verbose_name

=

“使用者生日”

null

=

True

blank

=

True

address

=

models

CharField

max_length

=

100

verbose_name

=

“聯絡地址”

default

=

“”

blank

=

True

mobile

=

models

CharField

max_length

=

11

verbose_name

=

“聯絡電話”

null

=

True

blank

=

True

user_image

=

models

ImageField

upload_to

=

“media/UserImage/%Y/%m”

default

=

“media/UserImage/default。png”

verbose_name

=

“使用者頭像”

null

=

True

blank

=

True

ROLE_CHOICES

=

“Root”

“超級管理員”

),

“EditUser”

“編輯”

),

“ReviewUser”

“稽核”

),

“WebsiteUsers”

“網站使用者”

),

“Tourist”

“遊客”

user_role

=

models

CharField

max_length

=

20

verbose_name

=

“使用者角色”

choices

=

ROLE_CHOICES

default

=

“遊客”

integral

=

models

IntegerField

default

=

0

verbose_name

=

“使用者積分”

vip_level

=

models

IntegerField

default

=

0

verbose_name

=

“使用者等級”

vip_exp

=

models

IntegerField

default

=

0

verbose_name

=

“使用者經驗”

class

Meta

verbose_name

=

“使用者資訊列表”

verbose_name_plural

=

verbose_name

def

__str__

self

):

return

self

username

# 使用者訂閱模型

class

UserSubscription

models

Model

):

email

=

models

CharField

max_length

=

100

verbose_name

=

“使用者郵箱”

unique

=

False

created_date

=

models

DateTimeField

default

=

timezone

now

verbose_name

=

‘建立時間’

help_text

=

‘預設建立時系統時間’

class

Meta

verbose_name

=

“使用者訂閱列表”

verbose_name_plural

=

verbose_name

def

__str__

self

):

return

self

email

# 使用者郵件模型

class

UserEmailVerifyRecord

models

Model

):

username

=

models

CharField

max_length

=

150

default

=

“”

verbose_name

=

“使用者名稱”

help_text

=

“使用郵箱功能的使用者”

code

=

models

CharField

max_length

=

20

default

=

“”

verbose_name

=

“驗證碼”

help_text

=

“系統隨機生成的郵件驗證碼”

email

=

models

EmailField

max_length

=

100

default

=

“”

verbose_name

=

“郵箱”

help_text

=

“使用郵箱功能註冊的郵箱”

send_type

=

models

CharField

max_length

=

20

default

=

“”

verbose_name

=

“驗證碼型別”

help_text

=

“使用者使用郵件功能的型別”

send_time

=

models

DateTimeField

default

=

timezone

now

verbose_name

=

“郵件傳送時間”

help_text

=

‘預設建立時系統時間’

class

Meta

verbose_name

=

“郵箱功能列表”

verbose_name_plural

=

verbose_name

def

__str__

self

):

return

‘{0}({1})’

format

self

code

self

email

# 使用者瀏覽模型

class

UserRead

models

Model

):

user

=

models

ForeignKey

UserProfile

related_name

=

‘user_read’

on_delete

=

models

CASCADE

verbose_name

=

“使用者id”

help_text

=

“必須為Admin系統中的使用者”

article_slug

=

models

CharField

max_length

=

100

default

=

“”

verbose_name

=

“瀏覽文章slug”

help_text

=

“文章的slug資訊”

add_time

=

models

DateTimeField

default

=

timezone

now

verbose_name

=

“瀏覽時間”

help_text

=

‘預設建立時系統時間’

class

Meta

verbose_name

=

‘使用者瀏覽資訊’

verbose_name_plural

=

verbose_name

unique_together

=

“user”

“article_slug”

“add_time”

def

__str__

self

):

return

self

user

username

管理 adminx。py

# coding:utf-8

from

django。contrib。auth

import

get_user_model

import

xadmin

from

xadmin。layout

import

*

from

django。contrib。auth。forms

import

UserChangeForm

from

django。contrib。auth。forms

import

UserCreationForm

UsernameField

from

。models

import

*

# 獲取全域性user管理

User

=

get_user_model

()

# 自定義使用者建立表單(建立使用者應用密碼儲存為加密方式)

class

MyUserCreationForm

UserCreationForm

):

class

Meta

model

=

User

fields

=

“username”

“user_role”

field_classes

=

{

“username”

UsernameField

}

# 使用者資訊管理

class

UserProfileAdmin

object

):

list_display

=

‘username’

‘user_role’

‘nick_name’

‘integral’

‘email’

readonly_fields

=

‘date_joined’

‘last_login’

show_bookmarks

=

False

# 配置自定義使用者建立表MyUserCreationForm

def

get_model_form

self

**

kwargs

):

if

self

org_obj

is

None

self

form

=

MyUserCreationForm

else

self

form

=

UserChangeForm

return

super

UserProfileAdmin

self

get_model_form

**

kwargs

def

get_form_layout

self

):

if

self

org_obj

self

form_layout

=

Main

Fieldset

‘使用者基本資訊’

‘username’

‘actual_name’

‘nick_name’

‘gender’

‘address’

‘mobile’

‘email’

‘birthday’

),

Fieldset

((

‘登入資訊’

),

Row

‘last_login’

‘date_joined’

),

),

Fieldset

None

‘password’

‘user_permissions’

‘first_name’

‘last_name’

**

{

“style”

“display:None”

}),

),

Side

Fieldset

((

‘使用者’

),

‘user_image’

),

Fieldset

((

‘使用者許可權’

),

‘groups’

),

Fieldset

((

‘使用者身份’

),

‘user_role’

‘is_active’

‘is_staff’

‘is_superuser’

),

return

super

UserProfileAdmin

self

get_form_layout

()

# 使用者訂閱管理

class

UserSubscriptionAdmin

object

):

list_display

=

‘email’

‘created_date’

show_bookmarks

=

False

# 使用者郵件管理

class

UserEmailVerifyRecordAdmin

object

):

list_display

=

‘code’

‘email’

‘send_type’

‘send_time’

show_bookmarks

=

False

# 設定全部欄位只讀

def

get_readonly_fields

self

):

return

f

name

for

f

in

self

model

_meta

fields

# 使用者瀏覽管理

class

UserReadAdmin

object

):

list_display

=

‘user’

‘article_slug’

‘add_time’

show_bookmarks

=

False

xadmin

site

unregister

UserProfile

xadmin

site

register

UserProfile

UserProfileAdmin

xadmin

site

register

UserSubscription

UserSubscriptionAdmin

xadmin

site

register

UserEmailVerifyRecord

UserEmailVerifyRecordAdmin

xadmin

site

register

UserRead

UserReadAdmin

檢視 Views。py

# coding:utf-8

__author__

=

‘Mr。資料楊’

__explain__

=

‘users的views’

from

django。http

import

HttpResponseRedirect

HttpResponse

from

django。shortcuts

import

render

redirect

from

django。urls

import

reverse

from

django。views。generic。base

import

View

from

django。contrib

import

auth

from

django。contrib。auth。hashers

import

make_password

from

。Forms

import

*

from

django。db。models

import

Q

from

apps。StatisticalData。views

import

*

from

apps。Configuration。config_html

import

*

from

apps。Configuration。config_msg

import

*

from

apps。Configuration。config_utils

import

*

# 使用者註冊View

class

UserRegisterView

View

):

def

get

self

request

):

visit_info

request

“使用者註冊訪問”

register_form

=

RegisterForm

()

# CBV方式get註冊頁面

return

render

request

UserRegisterHtml

{

“register_form”

register_form

})

def

post

self

request

):

visit_info

request

“使用者註冊提交”

register_form

=

RegisterForm

request

POST

# 判斷註冊資訊的Form表單是否合法

if

register_form

is_valid

():

nick_name

=

request

POST

get

“nick_name”

tel

=

request

POST

get

“tel”

username

=

request

POST

get

“username”

email

=

request

POST

get

“email”

password

=

request

POST

get

“password”

# 驗證使用者填寫資訊

user_data

=

UserProfile

objects

filter

Q

username

=

username

|

Q

mobile

=

tel

|

Q

email

=

email

))

if

user_data

return

render

request

UserRegisterHtml

{

“register_form”

register_form

“msg”

ErrorRegisterMsg

})

else

user_profile

=

UserProfile

()

user_profile

username

=

username

user_profile

nick_name

=

nick_name

user_profile

email

=

email

user_profile

is_active

=

False

user_profile

password

=

make_password

password

user_profile

save

()

# 傳送密碼找回郵件到使用者郵箱

SendEmail

username

email

“register”

return

HttpResponseRedirect

reverse

“MyHomeIndex”

))

else

# 跳轉填寫Form錯誤提示

return

render

request

UserRegisterHtml

{

“register_form”

register_form

})

# 使用者登陸View

class

UserLoginView

View

):

def

get

self

request

):

visit_info

request

“使用者登入訪問”

login_form

=

LoginForm

()

return

render

request

UserLoginHtml

{

“login_form”

login_form

})

def

post

self

request

):

visit_info

request

“使用者登入提交”

login_form

=

LoginForm

request

POST

# 判斷登陸資訊的Form表單是否合法

if

login_form

is_valid

():

username

=

request

POST

get

“username”

# username資料

password

=

request

POST

get

“password”

# password資料

# 驗證使用者名稱和密碼是否匹配

user_info

=

auth

authenticate

username

=

username

password

=

password

# 判斷使用者是否存在

if

user_info

# 將使用者名稱存入session中

request

session

“user”

=

username

auth

login

request

user_info

# 將使用者資訊新增到session中

return

HttpResponseRedirect

reverse

“MyHomeIndex”

))

else

# 使用者不存在錯誤跳轉

return

render

request

UserLoginHtml

{

“msg”

ErrorLogin

})

else

# 使用者不存在錯誤跳轉

return

render

request

UserLoginHtml

{

“msg”

ErrorLogin

})

# 使用者登出View

class

UserLogoutView

View

):

def

get

self

request

):

visit_info

request

“使用者登出”

auth

logout

request

return

redirect

‘MyHomeIndex’

# 使用者忘密碼透過郵箱獲取郵件View

class

UserForgotPasswordView

View

):

def

get

self

request

):

visit_info

request

“使用者忘記密碼訪問”

forgot_form

=

ForgotForm

()

return

render

request

UserForgotPasswordHtml

{

“forgot_form”

forgot_form

})

def

post

self

request

):

visit_info

request

“使用者忘記密碼提交”

forgot_form

=

ForgotForm

request

POST

email

=

request

POST

get

“email”

# email資料

tel

=

request

POST

get

“tel”

# email資料

# 驗證使用者填寫資訊

user_data

=

UserProfile

objects

filter

email

=

email

mobile

=

tel

if

user_data

username

=

user_data

first

()

username

# 傳送密碼找回郵件到使用者郵箱

SendEmail

username

email

“forgot”

# 跳轉到主頁

return

redirect

reverse

“UserLogin”

))

else

return

render

request

UserForgotPasswordHtml

{

“forgot_form”

forgot_form

“msg”

ErrorForgotMsg

})

# 驗證郵件操作型別是否可以操作,其中有時效驗證環節

class

EmailVerifyRecordView

View

):

def

get

self

request

):

visit_info

request

“使用者驗證資訊訪問”

username

=

request

GET

get

‘Username’

email

=

UserProfile

objects

get

username

=

username

email

send_type

=

request

GET

get

‘Type’

code

=

request

GET

get

‘Code’

# 驗證使用者填寫資訊

email_verify

=

UserEmailVerifyRecord

objects

get

username

=

username

email

=

email

send_type

=

send_type

code

=

code

check_status

=

CheckTime

email_verify

send_time

# 驗證碼有效

if

check_status

if

send_type

==

‘forgot’

return

HttpResponseRedirect

reverse

‘UserResetPassword’

kwargs

=

{

‘Username’

username

‘Type’

send_type

‘Code’

code

}))

else

return

HttpResponse

“啟用碼郵件已過期或者驗證碼不正確,請重新註冊啟用!!!”

# 這裡未來製作一個視覺化頁面

# 使用者透過郵件重置密碼View

class

UserResetPasswordView

View

):

def

get

self

request

**

kwargs

):

visit_info

request

“使用者密碼重置訪問”

username

=

kwargs

‘Username’

reset_form

=

ResetForm

()

return

render

request

UserResetPasswordHtml

{

“reset_form”

reset_form

“username”

username

})

def

post

self

request

**

kwargs

):

visit_info

request

“使用者密碼重置提交”

username

=

kwargs

‘Username’

reset_form

=

ResetForm

request

POST

if

reset_form

is_valid

():

password

=

request

POST

get

“password”

re_password

=

request

POST

get

“re_password”

if

password

!=

re_password

return

render

request

UserResetPasswordHtml

{

“reset_form”

reset_form

“msg”

ErrorPasswordMsg

})

else

user_info

=

UserProfile

objects

get

username

=

username

password

=

make_password

password

None

‘pbkdf2_sha256’

user_info

password

=

password

user_info

save

()

return

render

request

ResetRedirectHtml

{

“msg”

SuccessResetMsg

})

else

return

render

request

UserResetPasswordHtml

{

“reset_form”

reset_form

“msg”

ErrorResetMsg

})

表單驗證 Forms。py

from

captcha。fields

import

CaptchaField

from

django

import

forms

# 登陸驗證

class

LoginForm

forms

Form

):

username

=

forms

CharField

required

=

True

password

=

forms

CharField

required

=

True

min_length

=

5

captcha

=

CaptchaField

error_messages

=

{

“invalid”

“驗證碼錯誤”

})

# 註冊驗證

class

RegisterForm

forms

Form

):

username

=

forms

CharField

required

=

True

email

=

forms

EmailField

required

=

True

password

=

forms

CharField

required

=

True

min_length

=

5

captcha

=

CaptchaField

error_messages

=

{

“invalid”

“驗證碼錯誤”

})

# 忘記密碼驗證

class

ForgotForm

forms

Form

):

email

=

forms

EmailField

required

=

True

tel

=

forms

CharField

required

=

True

captcha

=

CaptchaField

error_messages

=

{

“invalid”

“驗證碼錯誤”

})

# 重置密碼驗證

class

ResetForm

forms

Form

):

password

=

forms

CharField

required

=

True

min_length

=

5

re_password

=

forms

CharField

required

=

True

min_length

=

5

captcha

=

CaptchaField

error_messages

=

{

“invalid”

“驗證碼錯誤”

})

配置 url。py

# coding:utf-8

from

django。urls

import

path

re_path

from

。views

import

*

app_name

=

‘User’

urlpatterns

=

# 使用者註冊路由地址

path

‘UserRegister’

UserRegisterView

as_view

(),

name

=

‘UserRegister’

),

# 使用者登陸路由地址

path

‘UserLogin’

UserLoginView

as_view

(),

name

=

‘UserLogin’

),

# 使用者登出路由地址

path

‘UserLogout’

UserLogoutView

as_view

(),

name

=

‘UserLogout’

),

# 使用者忘記密碼路由地址

path

‘UserForgotPassword’

UserForgotPasswordView

as_view

(),

name

=

‘UserForgotPassword’

),

# 郵箱驗證路由地址

path

‘EmailVerifyRecord’

EmailVerifyRecordView

as_view

(),

name

=

‘EmailVerifyRecord’

),

# 郵箱驗證路由地址

re_path

“UserResetPassword/\?Username=(?P\w+)&Type=(?P\w+)&Code=(?P\w+)”

UserResetPasswordView

as_view

(),

name

=

“UserResetPassword”

),

# 使用者重置密碼

path

‘UserResetPassword’

UserResetPasswordView

as_view

(),

name

=

‘UserResetPassword’

),

前端渲染模板

admin_base.html

<!doctype html>

<

html

class

=

“no-js”

lang

=

“cn”

>

{% load static %}

<

head

>

<

meta

charset

=

“utf-8”

>

<

meta

http-equiv

=

“x-ua-compatible”

content

=

“ie=edge”

>

<

title

>

Mr資料楊的部落格使用者管理模組

title

>

<

meta

name

=

“description”

content

=

“”

>

<

meta

name

=

“viewport”

content

=

“width=device-width, initial-scale=1”

>

<

link

rel

=

“shortcut icon”

type

=

“image/x-icon”

href

=

“img/favicon。ico”

>

<

link

href

=

“https://fonts。googleapis。com/css?family=Open+Sans:300,300i,400,400i,700,700i,800”

rel

=

“stylesheet”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/bootstrap。min。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/font-awesome。min。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/adminpro-custon-icon。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/meanmenu。min。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/jquery。mCustomScrollbar。min。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/animate。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/normalize。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/form。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/style。css’ %}”

>

<

link

rel

=

“stylesheet”

href

=

“{% static ‘User/css/responsive。css’ %}”

>

head

>

<

body

class

=

“darklayout”

>

{### 使用者功能載入模組 ###}

{% block user_function %}{% endblock %}

<

div

class

=

“footer-copyright-area”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“footer-copy-right”

>

<

p

>

Mr資料楊的部落格網站使用者管理系統

p

>

div

>

div

>

div

>

div

>

div

>

body

>

html

>

register.html

{% extends ‘User/user_function_admin。html’ %}

{% load staticfiles %}

{% block user_function %}

<

div

class

=

“wrapper-pro”

>

<

div

class

=

“breadcome-area mg-b-30 small-dn”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“breadcome-list shadow-reset”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-6”

>

<

div

class

=

“breadcome-heading”

>

<

h2

>

歡迎訪問使用,請註冊使用者會員

h2

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“login-form-area mg-t-30 mg-b-15”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-3”

>

div

>

<

form

id

=

“adminpro-register-form”

class

=

“adminpro-form”

method

=

“post”

>

{% csrf_token %}

<

div

class

=

“col-lg-6”

>

<

div

class

=

“login-bg”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“logo”

>

<

a

href

=

“#”

>

<

img

src

=

“{% static ‘admin/img/logo/log。png’ %}”

alt

=

“”

/>

a

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“login-title”

>

<

h1

>

請填寫註冊資訊

h1

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

使用者暱稱

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“nick_name”

/>

<

i

class

=

“fa fa-user login-user”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

使用者名稱

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“username”

/>

<

i

class

=

“fa fa-user login-user”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

電話

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“tel”

/>

<

i

class

=

“fa fa-phone login-user”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

電子郵箱

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“email”

name

=

“email”

/>

<

i

class

=

“fa fa-envelope login-user”

aria-hidden

=

“true”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

密碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“password”

name

=

“password”

/>

<

i

class

=

“fa fa-lock login-user”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

確認密碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“password”

name

=

“confarm_password”

/>

<

i

class

=

“fa fa-lock login-user”

>

i

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

驗證碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“form-group {% if register_form。captcha。errors %} errorput{% endif %}”

>

{{ active_form。captcha }}

 ; ;

{{ register_form。captcha }}

div

>

<

div

class

=

“error btns”

style

=

“font-size:5px;color:white”

>

{% for key, error in register_form。errors。items %}

{{ error }}

{% endfor %}

div

>

<

p

style

=

“font-size:5px;color:white”

>

{{ msg }}

p

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-button-pro”

>

<

button

type

=

“submit”

class

=

“login-button login-button-lg”

>

註冊使用者

button

>

div

>

div

>

div

>

div

>

div

>

form

>

<

div

class

=

“col-lg-3”

>

div

>

div

>

div

>

div

>

div

>

{% endblock %}

forgot.html

{% extends ‘User/user_function_admin。html’ %}

{% load staticfiles %}

{% block user_function %}

<

div

class

=

“wrapper-pro”

>

<

div

class

=

“breadcome-area mg-b-30 small-dn”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“breadcome-list shadow-reset”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-6”

>

<

div

class

=

“breadcome-heading”

>

<

h2

>

使用者密碼找回

h2

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“login-form-area mg-t-30 mg-b-40”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

div

>

<

form

id

=

“adminpro-form”

class

=

“adminpro-form”

method

=

“post”

>

{% csrf_token %}

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-bg”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“logo”

>

<

img

src

=

“{% static ‘admin/img/logo/log。png’ %}”

alt

=

“”

/>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“login-title”

>

<

h1

>

填寫註冊的郵箱和電話找回密碼

h1

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

郵箱

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“email”

/>

<

i

class

=

“fa fa-envelope login-user”

aria-hidden

=

“true”

>

i

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

電話

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“tel”

/>

<

i

class

=

“fa fa-phone login-user”

aria-hidden

=

“true”

>

i

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

驗證碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“form-group {% if forgot_form。captcha。errors %} errorput{% endif %}”

>

{{ active_form。captcha }}

 ; ;

{{ forgot_form。captcha }}

div

>

<

div

class

=

“error btns”

style

=

“font-size:5px;color:white”

>

{% for key, error in forgot_form。errors。items %}

{{ error }}

{% endfor %}

div

>

<

p

style

=

“font-size:5px;color:white”

>

{{ msg }}

p

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

div

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-button-pro”

>

<

button

type

=

“submit”

class

=

“login-button login-button-lg”

>

找回密碼

button

>

div

>

div

>

div

>

div

>

div

>

form

>

<

div

class

=

“col-lg-4”

>

div

>

div

>

div

>

div

>

div

>

{% endblock %}

login.html

{% extends ‘User/user_function_admin。html’ %}

{% load staticfiles %}

{% block user_function %}

<

div

class

=

“wrapper-pro”

>

<

div

class

=

“breadcome-area mg-b-30 small-dn”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“breadcome-list shadow-reset”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-6”

>

<

div

class

=

“breadcome-heading”

>

<

h2

>

歡迎訪問使用,請登入使用更多功能

h2

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“login-form-area mg-t-30 mg-b-40”

>

<

div

class

=

“container-fluid”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

div

>

<

form

id

=

“adminpro-form”

class

=

“adminpro-form”

method

=

“post”

>

{% csrf_token %}

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-bg”

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“logo”

>

<

img

src

=

“{% static ‘admin/img/logo/log。png’ %}”

alt

=

“”

/>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“login-title”

>

<

h1

>

填寫登入資訊

h1

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

郵箱/電話

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“text”

name

=

“username”

/>

<

i

class

=

“fa fa-envelope login-user”

aria-hidden

=

“true”

>

i

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

密碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-input-area”

>

<

input

type

=

“password”

name

=

“password”

/>

<

i

class

=

“fa fa-lock login-user”

>

i

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“forgot-password”

>

<

a

href

=

“#”

>

忘記密碼?

a

>

div

>

div

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

<

div

class

=

“login-input-head”

>

<

p

>

驗證碼

p

>

div

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“row”

>

<

div

class

=

“form-group {% if login_form。captcha。errors %} errorput{% endif %}”

>

{{ active_form。captcha }}

 ; ;

{{ login_form。captcha }}

div

>

<

div

class

=

“error btns”

style

=

“font-size:5px;color:white”

>

{% for key, error in login_form。errors。items %}

{{ error }}

{% endfor %}

div

>

<

p

style

=

“font-size:5px;color:white”

>

{{ msg }}

p

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-12”

>

<

div

class

=

“login-keep-me”

>

<

label

class

=

“checkbox”

>

<

input

type

=

“checkbox”

name

=

“remember”

checked

><

i

>

i

>

儲存登入資訊

label

>

div

>

div

>

div

>

<

div

class

=

“row”

>

<

div

class

=

“col-lg-4”

>

div

>

<

div

class

=

“col-lg-8”

>

<

div

class

=

“login-button-pro”

>

<

button

type

=

“submit”

class

=

“login-button login-button-lg”

>

登入

button

>

div

>

div

>

div

>

div

>

div

>

form

>

<

div

class

=

“col-lg-4”

>

div

>

div

>

div

>

div

>

div

>

{% endblock %}

標簽: divclass  div  LG  form  login