forms模塊的高級處理
將models和forms結合到一起使用
1.在forms.py中創建class 繼承自forms.ModelForm
2.創建一個內部類Meta來關聯Model
model 指定要關聯的實體類是誰
fields 指定從model中取出那些字段生成控件
取值 "__all__"表示全部屬性都要生控件
列表 聲明允許生成控件的屬性名
labels 指定每個屬性所關聯的label 取值爲字典
label = {
'屬性名':'label文本',
'屬性名':'label文本',
}
class RegisterForm(forms.ModelForm):
#通過內部類Meta表示關聯的信息
class Meta:
#1.指定關聯的Model
model = User
#2.指定要生成控件的字段們
fields = "__all__"
#3.指定每個控件對應的label
labels = {
'uphone':'電話號碼',
'upwd':'登錄密碼',
'uname':'用戶名稱',
'uemail':'電子郵件',
}
if request.method == 'GET':
form = RegisterForm()
return render(request,'05-register.html',locals())
小部件:
什麼是小部件?
widget表示生成到頁面上的控件類型以及其他的HTML屬性
常用小部件類型
TextInput: type="text"
PasswordInput: type="password"
NumberInput: type="number"
EmailInput: type="email"
URLInput: type="url"
HiddenInput: type="hidden"
CheckboxInput: type="checkbox"
Textarea: <textarea></textarea>
Select: <select></select>
小部件的使用
繼承自forms.Form
基本
只需要指定控件的類型
class RemarkForm(forms.Form):
屬性 = forms.CharField(
label:'文本',
widget=forms.小部件類型
)
高級
指定控件類型的基礎上 還允許設置HTML的一些相關屬性
屬性 = forms.CharField(
label="文本"
widget=forms.小部件類型(
attrs = {
"html屬性名":"html屬性值",
"html屬性名":"HTML屬性值"
}
)
)
繼承自forms.ModelForm
class xxxForm(forms.ModelForm):
class Meta:
model = User
fields = "__all__"
labels = {
"屬性":"label"
}
widgets = {
"屬性1": forms.小部件類型(attrs={
}),
}
class LoginForm(forms.ModelForm):
class Meta:
model = User
fields = ['uphone','upwd']
labels = {
'uphone':'註冊電話',
'upwd':'登錄密碼',
}
#指定小部件
widgets = {
'upwd':forms.PasswordInput(attrs={
'placeholder':'請輸入您的密碼'
})
}
class WidgetLoginForm(forms.Form):
uphone = forms.CharField(label='電話號碼')
#爲pwd指定小部件,顯示爲 密碼框
# upwd = forms.CharField(label='登錄密碼',widget=forms.PasswordInput)
upwd = forms.CharField(
label='登錄密碼',
widget=forms.PasswordInput(
attrs = {
'placeholder':'請輸入密碼',
'class':'form-control',
}
)
)
cookies在Django中的實現
django中使用cookies
設置cookies:
響應對象.set_cookie(key, value, expires)
key:cookie的名字
value:cookie的值
expires:保存時間 以s爲單位
響應對象:
HttpResponse()
resp = HttpResponse("hello")
resp.set_cookie(response, "xxx.html", locals())
return resp
render()
獲取cookies的值:
通過request.COOKIES 獲取當前站點下對的所有的cookie的信息
def login_views(request):
if request.method == 'GET':
#判斷uname是否存在於cookies中,如果有的話,直接提示登錄成功,否則,去往09-login模板
if 'uname' in request.COOKIES:
return HttpResponse('您已成功登錄過')
return render(request,'09-login.html')
else:
# 獲取用戶名稱和密碼
uname=request.POST['uname']
upwd = request.POST['upwd']
# 判斷用戶名稱和密碼的
if uname=='wangwc' and upwd=='123456':
# 如果用戶名和密碼正確的話,判斷有沒有勾住記住密碼
resp = HttpResponse("登錄成功")
if 'isSaved' in request.POST:
# 如果有勾住記住密碼,則將用戶名稱保存進cookies
resp.set_cookie('uname',uname,60*60*24*90)
return resp
else:
return HttpResponse('登錄失敗')
session在django中的實現:
設置session的值:
request.session["key"] = value
獲取session的值:
value = request.session["key"]
刪除session的值
del request.session["key"]
在settings.py中設置session的相關設置
SESSION_COOKIE_AGE
設置 sessionID在cookies中的保存時間
SESSION_COOKIE_AGE = 60 * 60 * 24 # 最多保存24小時
SESSION_EXPIRE_AT_BROWSER_CLOSE
設置關閉瀏覽器是則清空服務器上對應的session空間
bool值
# 設置session
def setSession_views(request):
request.session['uname']='wangwc'
return HttpResponse('Set Session Succefull')
# 獲取session
def getSession_views(request):
uname = request.session['uname']
return HttpResponse('uname:'+uname)