Python全栈 Web(Django框架、forms对象、cookie、session)
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)