day21 雷神 django第四天

2022-08-05 11:36:13 字數 4192 閱讀 4429

解決兩個事情:

不想重複提交,資料重置;

校驗規則

流程:

(1) 建立form元件對應的類,比如loginform

(2)

views.login:

if get請求:

form_obj=loginform()

return render(request,"login.html",) # 由form_obj渲染form表單的有效控制元件

渲染方式三種:

123if post請求:

form_obj = loginfrom(request.post)

if form_obj.is_valid():

form_obj.cleaned_data # 所有的有效資料

else:

#form_obj.errors # {}

#form_obj.errors.get("user") #

return render(request, "login.html", )

urls.py

from django.conf.urls import url

from django.contrib import admin

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^register/', views.register),

]

models.py

from django.db import models

# create your models here.

class userinfo(models.model):

name = models.charfield(max_length=32)

pwd = models.charfield(max_length=32,default=1)

views.py

from django.shortcuts import render, httpresponse

from .models import *

# create your views here.

from django import forms

from django.forms import widgets

from django.core.exceptions import validationerror

class regform(forms.form):

name = forms.charfield(

label='使用者名稱',

max_length=16,

min_length=3,

error_messages=

)pwd = forms.charfield(

error_messages=,

widget=widgets.passwordinput(attrs={})

)repeat_pwd = forms.charfield(

error_messages=,

widget=widgets.passwordinput(attrs={})

)email = forms.emailfield()

phone = forms.charfield()

def clean_user(self):

val = self.cleaned_data.get('user') # 注意是cleaned_data

ret = userinfo.objects.filter(name=val)

if not ret:

return val # 通過,返回該值,不通過,返回錯誤資訊,validationerror()

else:

raise validationerror('該使用者已註冊')

def clean_phone(self):

val = self.cleaned_data.get('phone')

import re

ret = re.search("^1[3578]\d$", val)

if ret:

return val

else:

raise validationerror('手機號格式錯誤')

def clean(self): # clean是全域性鉤子

pwd = self.cleaned_data.get('pwd')

repeat_pwd = self.cleaned_data.get('repeat_pwd')

if pwd == repeat_pwd:

return self.cleaned_data

else:

raise validationerror('兩次密碼不一致')

def register(request):

if request.method == 'post':

reg_form = regform(request.post)

if reg_form.is_valid():

name = reg_form.cleaned_data.get('name')

pwd = reg_form.cleaned_data.get('pwd')

userinfo.objects.create(name=name, pwd=pwd)

return httpresponse('註冊成功!')

else:

all_err = reg_form.errors.get('__all__')

print(all_err)

return render(request, 'register.html', locals())

reg_form = regform()

return render(request, 'register.html', locals()) # 包含函式執行,到這locals的所有區域性變數。

templates

request.user 存的是當前使用者的物件,沒有登入的話是一個匿名使用者物件。

1 使用auth_user表作為使用者表

2 登入:

user=auth.authenticate(username=user,password=pwd)

auth.login(request,user) # session寫操作

auth.logout(request) # request.session.flush()

驗證 user.is_authenticated() # 登入狀態時,返回true,否則返回false

建立使用者:user.objects.create_user(username="egon123",password="1234")

locals() 深拷貝 完全獨立,模板裡改變變數的值,函式裡的值不會改變。

ajax

1. 發請求的途徑

1. 在瀏覽器地址上輸入地址 回車 ——》 get

2. form表單 ——》 get / post

3. a標籤 ——》 get

2. ajax

使用js技術傳送非同步請求 一般傳輸json資料

特點:區域性重新整理 當前頁面不重新整理

非同步 1. 計算示例

$.ajax(,

success:function (res)

})2. ajax的引數介紹

上傳檔案

form_obj = new formdata();

# jquery物件轉換為dom物件,方法files,可能傳多個檔案,只要一個,,這就包含了資料得form_data物件。

$.ajax(,

})2.

headers:,

3、 使用檔案