方式一html
1 var arr=[12,45,78]; 2 $.each(arr,function(i,j){ 3 console.log(i,j) 4 })
結果:前端
方式二python
結果:git
方式三數據庫
結果:django
(1)在models中建立一張表app
1 class UserInfo(models.Model): 2 name=models.CharField(max_length=32) 3 pwd=models.CharField(max_length=32) 4 email=models.EmailField()
(2)在視圖中建立與之相對應的form組件函數
1 from django import forms 2 class UserForm(forms.Form): 3 name=forms.CharField(max_length=32) 4 pwd=forms.IntegerField() 5 email=forms.EmailField()
(3)執行python.consolepost
先引入組件: ui
from app01.views import UserForm
再建立一個實例對象:
form=UserForm({"name":"aaa","pwd":123,"email":"123"})
判斷輸入的值是否是徹底合法:
form.is_valid()
多輸入鍵值對不影響合法性,少,錯鍵值對以及數據不符合規則,都會返回False
合法的數據存在:
form.cleaned_data
以字典的形式: {'name': 'aaa', 'pwd': 123}
不合法的數據存在:
form.errors
以字典的形式存儲錯誤信息:{'email': ['錯誤一',」錯誤二」]}
(1)要實現的要求:
用戶名長度不能低於5位,用戶名不能重複
密碼不能是純數字
郵箱必須符合郵箱格式
錯誤信息提示
(2) forms組件的功能
校驗數據
頁面顯示錯誤信息
渲染頁面和重置數據
(3) 本身寫細節,麻煩
①在models.py文件中:
class UserInfo(models.Model):
user=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
email=models.CharField(max_length=32)
②在視圖函數中:
③在前端頁面中
<form action="" method="post">
{% csrf_token %}
用戶名: <input type="text" name="user"> <span class="error">{{ error.user.0 }}</span><br>
密碼: <input type="password" name="pwd"> <span class="error">{{ error.pwd.0 }}</span> <br>
郵箱: <input type="text" name="email"> <span class="error">{{ error.email.0 }}</span> <br>
<input type="submit">
</form>
④能實現的效果:
(2) 用forms組件實現的三種方法
方法一:
在視圖函數中直接傳遞實例化的form對象
form = UserForm()
return render(request, "reg.html", {"form": form})
HTML文件中一句話渲染,全部的樣式都來自form組件自帶的
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
前端渲染:
效果圖
方法二:只渲染一個input輸入框,
在視圖中:
在HTML文件中:
<form action="" method="post" novalidate>#novalidate表示前端不在對信息進行阻攔
{% csrf_token %}
<p> 用戶名 {{ form.user }}<span class="error">{{ error.user.0 }}</span> </p>
#Form對象只渲染一個input框
<p>密碼 {{ form.pwd }}<span class="error">{{ error.pwd.0 }}</span></p>
<p>郵箱 {{ form.email }}<span class="error">{{ error.email.0 }}</span></p>
<input type="submit">
</form>
效果:可以實現數據重置
第三種:循環form的每個對象
在視圖函數中:
在HTML文件中
(5)後期手動調樣式
3.自定義form組建(鉤子的使用)
鉤子的語法:每一份鉤子走到最後要麼是將數據返回,要麼是拋出一個ValidationError錯誤
錯誤須要引入,函數命名時,必定是clean_字段,不然原碼找不到
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
def clean_user(self):
val=self.cleaned_data.get("user")
UserInfo.objects.filter(user=val)
if not val:
return val
else:
raise ValidationError("用戶名已存在")
def clean_pwd(self):
val=self.cleaned_data.get("pwd")
if val.isdigit():
raise ValidationError("密碼不能是純數字")
else:
return val
鉤子效果:
6.鉤子原碼解析
form組件例:
class UserForm(forms.Form):
user=forms.CharField(min_length=5,
label="用戶名",
#自定義的label
error_messages={"required":"請填寫用戶名"},
widget=widgets.TextInput(attrs={"class":"form-control"})
)
pwd=forms.CharField(error_messages={"required":"請填寫密碼"},
label="密碼",
widget=widgets.PasswordInput(attrs={"class":'form-control'})
)
email=forms.EmailField(error_messages={"required":"請填寫郵箱","invalid":"郵箱格式錯誤"},
label="郵箱",
widget=widgets.EmailInput(attrs={"class": 'form-control'})
)
def clean_user(self):
val=self.cleaned_data.get("user")
UserInfo.objects.filter(user=val)
if not val:
return val
else:
raise ValidationError("用戶名已存在")
def clean_pwd(self):
val=self.cleaned_data.get("pwd")
if val.isdigit():
raise ValidationError("密碼不能是純數字")
else:
return val
如下幾步到底經歷了哪些 ?
Form=UserForm({「user」:」may」,」pwd」:」123」,」email」:」123」})
Form.is_valid()
Form.clean_data
Form.errors
三. 打散補充
*是打散列表的,**是打散字典的
四.pycharm自帶數據庫的使用