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
如果不是就返回无权访问,

#是否已经提交过当前问卷的答案

#展示当前问卷下的所有的问题
    
    
    
    
    
    
    
    

posted on 2017-12-10 14:36  海燕。  阅读(720)  评论(0编辑  收藏  举报