• 调查问卷相关


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

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

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

  • 相关阅读:
    phpcs
    asp.net之cookie
    ajax技术
    union、except和intersect查询
    外连接查询
    对查询结果分组
    聚合函数查询
    数据库的约束
    数据库备份
    fusionCharts
  • 原文地址:https://www.cnblogs.com/haiyan123/p/8016868.html
Copyright © 2020-2023  润新知