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)