1、问卷的保存按钮
前端通过ajax把数据发过来后端处理数据,然后返回给前端2、对问卷做答首先用户进行登录,验证条件:1、只有本班的学生才能对问卷做答 2、已经参加过的不能再次访问 在前端显示的样式 显示当前问卷的问题 - 你对近期的学习有哪些意见、。? 1 2 3 4 5 。。 10 - 路宁女朋友一些建议? 文本... - 路宁选择帽子颜色? A. 绿色 B.翠绿 C. 墨绿 D.深绿色问卷的保存按钮涉及到的知识点:集合的操作:s = [1,4,5,8] s2 = [2,4,7,8,6] print(set(s).difference(s2)) #做差集,在s中找和s2不同的元素 {1, 5} print(set(s2).difference(s)) #做差集,在s2中找和s不同的元素 {2, 6, 7} print(set(s)-set(s2)) #这种方式和上面的一样 {1, 5} print(set(s2)^set(s)) #交集 {1, 2, 5, 6, 7} print(set(s2)|set(s)) #并集 {1, 2, 4, 5, 6, 7, 8}
思路分析:
拿到前端的数据,像下面这种格式的 如果是json格式发的,注意要在request.body中取值。 ajax_post_list = [ { 'id': 2, 'caption': "鲁宁爱不是番禺??", 'tp': 1, }, { 'id': None, 'caption': "八级哥肾好不好?", 'tp': 3 }, { 'id': None, 'caption': "鲁宁脸打不打?", 'tp': 2, "options": [ {'id': 1, 'name': '绿', 'score': 10}, {'id': 2, 'name': '翠绿', 'score': 8}, ] }, ] 前端的数据和数据库的数据进行比较, - 前端有后端没有要添加 - 前端没有后端有要删除 - 前端有后端也有要更新 #数据库中的那些问题id需要删除(数据库里有前端没有的数据删除)采用集合操作,求差集 del_id_list = set(question_id_list).difference(post_id_list) #del_id_list就是要删除的id 循环前端发过来的数据,得到数据依次进行比较, #判断前端传进来的id不在数据库里面,就说明要新增 #如果发过来的ty_id是2(单选)的时候,也要新增 #否则就是要更新 #更新的时候注意也要判断一下ty_id,如果没有的话就的吧数据库的删除了,如果有的话 #就先吧数据库的删除了,然后创建更新问卷的问卷做答涉及到的知识点: 1、创建类的两种方式 方式一: class Foo(object): x1=5 def func(self,arg): return arg 方式二: Foo = type('Foo',(object,),{"x1":5,"func":lambda x:x}) 有与Python中一切皆对象,所以累也是一个对象,它是type的对象,所以这里就可以实例化 这里的三个参数分别是,:类名,继承的类,字典里面可以放静态属性也可以放方法等。 2、split切割 s = "aaaa_ssss_ddd" print(s.split("_")) #['aaaa', 'ssss', 'ddd'] print(s.split("_",1)) #['aaaa', 'ssss_ddd'] #这里的参数1代表式按第一个下划线分割 print(s.rsplit("_",1)) #['aaaa_ssss', 'ddd'] #rsplit表示从右边的第一个下划线分割 3、Form前端循环 views.py class LoginForm(Form): name = ... pwd = ... def login(request): form = LoginForm() return render(request,"login.html") login.html 不用循环实现的、 <div> { { form.name }} { { form.errors.name.0 }} { { form.aee }} { { form.errors.age.0 }} </div> 用循环实现的、 <div> {% for item in form %} { { item.label }}{ { item }}{ { item.errors.0 }} input框前的文字----每个input框----错误提示 {% endfor %} </div> 4、自定义Form验证规则 def func(val): if len(val) < 15: raise ValidationError('你太短了') class LoginForm(Form): name1和name2是一样的,只是两种表示的方式 name1 = fields.CharField(label='xxx', widget=widgets.Textarea, validators=[RegexValidator(regex=""),]) name2 = fields.RegexField(label='xxx', widget=widgets.Textarea, regex="xxx") 如果上面的验证不满足你需求的时候,可以用这一种。 注意: validators=[func, ]这里的func函数不加(),Form会自动找到这个函数去运行它 name3 = fields.CharField(label=que.caption, widget=widgets.Textarea, validators=[func, ]) 也可以自己去定义钩子函数去验证 def clean_name1(self,val): return val 具体操作:首先用户得先登录#先判断哪些人可以答卷查看当前登录用户是否是要评论的班级的学生models.Student如果不是就返回无权访问,#是否已经提交过当前问卷的答案#展示当前问卷下的所有的问题