python表单_python的Web框架,会话保持及Form表单

会话

从打开浏览器访问到关闭浏览器,这就是一次会话。

cookie 技术

cookie是保存在浏览器的,安全度比较低。

1 #设置cookie范式,在view中设置

2

3 defindex(request):4 #查看是否有num的这个cookie

5 num = request.COOKIES.get('num')6 ifnum:7 num = str(int(num)+1)8 else:9 num = '1'

10

11 response = render(request, 'teacher/index.html', context={12 'num':num13 })14 #设置cookie字段,max_age为浏览器保留的cookie时间(过期时间)。

15 response.set_cookie('num',num, max_age=10)16 return response

session 技术

在settings中注册,且是做了数据库迁移的。存储的数据默认存储在django_sessions表中

1 INSTALLED_APPS =[2 'teacher.apps.TeacherConfig',3 'django.contrib.admin',4 'django.contrib.auth',5 'django.contrib.contenttypes',6 'django.contrib.sessions', #最新的版本中是默认注册了的。但需要检查是否注册

7 'django.contrib.messages',8 'django.contrib.staticfiles',9 ]10

11 MIDDLEWARE =[12 'django.middleware.security.SecurityMiddleware',13 'django.contrib.sessions.middleware.SessionMiddleware', #默认是添加了的

14 'django.middleware.common.CommonMiddleware',15 'django.middleware.csrf.CsrfViewMiddleware',16 'django.contrib.auth.middleware.AuthenticationMiddleware',17 'django.contrib.messages.middleware.MessageMiddleware',18 'django.middleware.clickjacking.XFrameOptionsMiddleware',19 ]

设置session,view中配置

1 deflogin(request):2 if request.method == 'POST'

3 username = request.POST.get('username','')4 password = request.POST.get('password','')5 if username == 'aaa' and password == '123456':6 #如果登录成功,则把当前的用户名保存在session中

7 request.session['name'] =username8

9 #设置过期时间set_expiry

10 request.session.set_expiry(10)11 return redirect(reverse('teacher:index'))12

13 #如果在index的html中需要展示用户名的信息,则需要在index中获取session

14 #name = request.session.get('name'),然后在通过context传送到html中

15

16

17 #设置退出

18 deflogout(request):19 request.session.flush()20 return redirect(reverse('teacher:index'))21

22

23 #应用于html的和之前的方式是一样的。{{ }}or{% %}

session 依赖于cookie,cookie存在客户端,session存在服务端。

简单的Form表单

在app下面创建一个forms.py的文件

1 #导包

2 from django importforms3 classRegisterForm(forms.Form):4 username = forms.CharField(label='用户名', max_length=20)5 password = forms.CharField(label='密码',max_length=10,min_length=6,6 widget=forms.PasswordInput(attrs={'placeholder':'请输入长度为6-10位的密码'}),7 error_messages={'min_length':'密码长度小于6位','max_length':'密码长度大于10位'})8 password_repeat = forms.CharField(label='请再次输入密码',widget=forms.PasswordInput())9 email = forms.EmailField(required=False)10

11 defclean(self):12 cleaned_data = super().clean() #继承父类的clean方法

13

14 #从父类中检测处理过的数据

15 password = cleaned_data.get('password')16 password_repeat = cleaned_data.get('password_repeat')17

18 if password !=password_repeat:19 msg = '两次密码输入不一致'

20 self.add_error('password_repeat', msg) #把这个错误的信息加入到password_repeat这个字段中

21

22

23 解析:24 form表单中的不同的字段将会生成不同的input类型,CharField默认对应text25 字段名(变量)对应的html中input中的name26 PasswordInput:被渲染成passwo的input标签,里面的内容可以和input一样的内容定制27 label:对应的html中的label标签中的内容28 error_messages:表示出错后的提示29 required=False:可以不填写,表示可以是不填的选项

在view中应用:

1 #从APP中导入

2 from teacher.forms importRegisterForm3 defregister(request):4 #判断method

5 if request.method == 'GET':6 form = RegisterForm() #实例

7

8

9 if request.method == 'POST':10 form =RegisterForm(request.POST)11 ifform.is_valid():12 return HttpResponse('注册成功')13

14 return render(requerst, 'teacher/register.html', context={'form':form})15

16

17

18 解析:19 RegisterForm(request.POST),会根据传进来的request的值来创建一个form,一个绑定的form20 is_valid:自动会去根据配置好的去验证,调用此方法的时候,就会默认调用form里面的clean方法。21

在html中应用:

1

2 {% csrf_token %}3 {{ form.as_p }}4

5

form的标签和submit需要自己添加,其他的自己渲染。as_p代表用p标签包裹。

查看渲染后,代码是什么样式。

1 查看渲染后的代码2

3

用户名:

4

密码:

5

请再次输入密码:

6

Email:

7

8

输出渲染的结果:

密码的判断输出方式

模型Form表单

同样写在forms.py的文件内

1 #把需要的models模型导入

2 from teacher.models import Students,StudentsDetail

定义表单

1 #Students表单

2 classStudentForm(forms.ModelForm):3 classMeta:4 #不需要一个一个的编辑了,只需要用自带的方法即可,即排除

5 model =Students6

7 #表单内除了'is_deleted'这个字段外,其他的都需要,使用exclude方法

8 exclude = ['is_deleted']9

10 #StudentsDetail表单

11 classStudentDetailForm(forms.ModelForm):12 classMeta:13 model =StudentsDetail14

15 #表单内只需要这些字段,使用fields方法

16 fields = ['num', 'college']

在view中应用

1 #导入需要的form模型表单

2 from teacher.forms import StudentForm, StudentDetailForm

编辑学生信息页面

1 defnew_edit(request, pk):2 #获取当前编辑字段的信息

3 student = Students.objects.get(pk=pk)4

5 form = StudentForm(instance=student)6

7 try:8 #这里做出捕获异常,防止这个学生字段没有相对应的studentsdetail字段。

9 detail_form = StudentDetailForm(instance=student.studentsdetail)10

11 except:12 #如果报错,说明这个学生还没有学生详情

13

14 #生产一个空的详情

15 student_detail =StudentsDetail()16

17 #把两个表相关联起来,保存

18 student_detail.sudent =student19 student_detail.save()20

21 #生成新的form表单

22 detail_form = StudentDetailForm(instance=student_detail)23

24 *****此处的POST方法写在下面的POST请求方式操作中。25

26 return render(request, 'teacher/new_student_edit.html', context={27 'section': section,28 'student': student,29 'form': form,30 'detail_form': detail_form,31 })32

33

34 解析:35 instance:绑定一个信息,用于修改。36 如果不写这个,则生成一个空的Form,用于添加。37

html中整体应用

1

2 {% csrf_token %}3 {{ form.as_p }}4 {{ detail_form.as_p }}5

6 提交

7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值