Example #1
0
    def get_context_data(self, **kwargs):
        context = super(PostDetail, self).get_context_data(**kwargs)
        if not self.object.auto_gen:
            raw_text = self.object.body

            item_descs = re.findall(ur"(\[\[item[:]([^|\[\]]+)(?:\|([^\]\[]+))?\]\])", raw_text)
            for item_desc in item_descs:
                full_match, src_url, caption = item_desc
                try:
                    item = Item.objects.get(source__startswith=src_url)
                    if not caption:
                        caption = item.name
                    new_item_desc = '<div class="thumbnail">' \
                                    '<a href="%s"><span style="background-image:url(%s);"></span></a>' \
                                    '<div class="caption"><p>%s</p></div>' \
                                    '</div>' % (escape_uri_path(item.get_absolute_url()),
                                                escape_uri_path(item.image_url),
                                                caption.encode('utf-8'))
                    raw_text = raw_text.replace(full_match, new_item_desc)
                except Item.DoesNotExist:
                    print src_url
                    continue

            context['body'] = mark_safe(raw_text)
        else:
            t = loader.get_template('blog/auto_post.html')
            c = Context({"post": self.object})
            context['body'] = t.render(c)
        return context
Example #2
0
 def test_escape_uri_path(self):
     self.assertEqual(
         escape_uri_path("/;some/=awful/?path/:with/@lots/&of/+awful/chars"),
         "/%3Bsome/%3Dawful/%3Fpath/:with/@lots/&of/+awful/chars",
     )
     self.assertEqual(escape_uri_path("/foo#bar"), "/foo%23bar")
     self.assertEqual(escape_uri_path("/foo?bar"), "/foo%3Fbar")
Example #3
0
    def get(self, request):
        back_id = int(request.query_params.get("id"))
        token = request.query_params.get("token")
        try:
            res = jwt.decode(token, JWT_TOKEN_KEY, algorithms='HS256')
            username = res['username']
            user = UserInfo.objects.filter(name=username).first()
            user_id = user.id
        except Exception as e:
            print(e)
            return Response(status=401)
        back = BackupRecord.objects.filter(id=back_id).first()
        if back:
            file_name_path = back.backup_filepath

            def file_iterator(file_name, chunk_size=512):
                with open(file_name, 'rb') as f:
                    while True:
                        c = f.read(chunk_size)
                        if c:
                            yield c
                        else:
                            break

            the_file_name = file_name_path
            print(escape_uri_path(file_name_path.split("/")[-1]))
            response = StreamingHttpResponse(file_iterator(the_file_name))
            response['Content-Type'] = 'application/octet-stream'
            response[
                'Content-Disposition'] = 'attachment;filename="{0}"'.format(
                    escape_uri_path(file_name_path.split("/")[-1]))

            return response
        else:
            return Response(status=401, data={'info': '无权限!'})
Example #4
0
    def download_image(self, request, queryset):

        if len(queryset) >= 2:
            z = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)
            for data in queryset:
                file_path = str(data.image.url).strip('/')
                file_name = str(data.name) + '-' + file_path.split('/')[-1]
                z.write(file_path, file_name)

            export_name = escape_uri_path(str(len(queryset)) + 'images')
            response = StreamingHttpResponse(z)
            response['Content-Type'] = 'application/zip'
            response[
                'Content-Disposition'] = 'attachment; filename={}.zip'.format(
                    export_name)
            return response

        elif len(queryset) >= 1:
            for data in queryset:
                file_path = str(data.image.url).strip('/')
                file_name = str(data.name) + '-' + file_path.split('/')[-1]
                file = open(file_path, 'rb')

                export_name = escape_uri_path(file_name)
                response = FileResponse(file)
                response['Content-Type'] = 'application/octet-stream'
                response[
                    'Content-Disposition'] = 'attachment;filename={}'.format(
                        export_name)
                return response
        else:
            return None
Example #5
0
 def test_escape_uri_path(self):
     self.assertEqual(
         escape_uri_path('/;some/=awful/?path/:with/@lots/&of/+awful/chars'),
         '/%3Bsome/%3Dawful/%3Fpath/:with/@lots/&of/+awful/chars'
     )
     self.assertEqual(escape_uri_path('/foo#bar'), '/foo%23bar')
     self.assertEqual(escape_uri_path('/foo?bar'), '/foo%3Fbar')
Example #6
0
 def test_escape_uri_path(self):
     self.assertEqual(
         escape_uri_path(
             '/;some/=awful/?path/:with/@lots/&of/+awful/chars'),
         '/%3Bsome/%3Dawful/%3Fpath/:with/@lots/&of/+awful/chars')
     self.assertEqual(escape_uri_path('/foo#bar'), '/foo%23bar')
     self.assertEqual(escape_uri_path('/foo?bar'), '/foo%3Fbar')
Example #7
0
    def do_redirect(self, request, response=None):
        if getattr(settings, "DJANGOCMS_REDIRECT_404_ONLY",
                   True) and response and response.status_code != 404:
            return response

        req_path = request.path
        # get the query string
        querystring = request.META.get("QUERY_STRING", "")
        if querystring:
            querystring = "?%s" % iri_to_uri(querystring)
        # start with the path as is
        possible_paths = [req_path]
        # add the unquoted path if it differs
        req_path_quoted = escape_uri_path(req_path)
        if req_path_quoted != req_path:
            possible_paths.append(req_path_quoted)
        # if a slash is missing, try to append it
        if not req_path.endswith("/"):
            req_path_slash = req_path + "/"
            possible_paths.append(req_path_slash)
            req_path_slash_quoted = escape_uri_path(req_path_slash)
            if req_path_slash_quoted != req_path_slash:
                possible_paths.append(req_path_slash_quoted)

        current_site = get_current_site(request)
        r = None
        key = get_key_from_path_and_site(req_path, settings.SITE_ID)
        cached_redirect = cache.get(key)

        if not cached_redirect:
            for path in possible_paths:
                filters = dict(site=current_site, old_path=path)
                try:
                    r = Redirect.objects.get(**filters)
                    break
                except Redirect.DoesNotExist:
                    r = self._match_substring(path)
                    if r:
                        break

            cached_redirect = {
                "site": settings.SITE_ID,
                "redirect": r.new_path if r else None,
                "status_code": r.response_code if r else None,
            }
            cache.set(key,
                      cached_redirect,
                      timeout=getattr(settings,
                                      "DJANGOCMS_REDIRECT_CACHE_TIMEOUT",
                                      3600))
        if cached_redirect["redirect"] == "":
            return self.response_gone_class()
        if cached_redirect["status_code"] == "302":
            return self.response_redirect_class("{}{}".format(
                cached_redirect["redirect"], querystring))
        elif cached_redirect["status_code"] == "301":
            return self.response_permanent_redirect_class("{}{}".format(
                cached_redirect["redirect"], querystring))
        elif cached_redirect["status_code"] == "410":
            return self.response_gone_class()
Example #8
0
def download_week_report(request, pk):
    file = CityWeekRecord.get_report(pk)
    file_path = os.path.join(settings.DEVICE_REPORT_DIR, file)
    print(escape_uri_path(file_path))
    response = FileResponse(open(file_path, 'rb'))
    # response['Content-Type'] = 'application/octet-stream'
    response[
        'Content-Type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(
        escape_uri_path(file))
    return response
Example #9
0
def download(request):
    schedule = request.GET.get('schedule')
    filename = request.GET.get('filename')
    username = request.user.username
    schedule_obj = get_object_or_404(HostSnapshotShare, id=schedule)
    if schedule_obj.login_user != username:
        _logger.warning('download user Forbidden')
        return HttpResponseForbidden()

    root_dir = os.path.join('/home/', schedule_obj.samba_user,
                            schedule_obj.samba_user, schedule_obj.dirinfo)
    if not filename.startswith(root_dir):
        _logger.warning(
            'download invalid Forbidden, root_dir:{}'.format(root_dir))
        return HttpResponseForbidden()

    if not os.path.exists(filename):
        _logger.warning(
            'download not exists Forbidden, filename:{}'.format(filename))
        return HttpResponseForbidden()

    if not os.path.isfile(filename):
        _logger.warning(
            'download not file Forbidden, filename:{}'.format(filename))
        return HttpResponseForbidden()

    response = HttpResponse()
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment;filename="{0}"'.format(
        os.path.split(escape_uri_path(filename))[-1])
    response['content-length'] = '{}'.format(os.stat(filename).st_size)
    response['X-Accel-Redirect'] = '/file_download/' + '/'.join(
        quote(filename, encoding='utf-8').split('/')[2:])
    return response
Example #10
0
def downware(request):
    file = open("proxy/" + request.GET['username'], 'rb')
    response = HttpResponse(file)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment;filename*=utf-8''{}".format(
        escape_uri_path(request.GET['username']))
    return response
Example #11
0
def orgchart_get_by_username(request, path, username):
    """Internal routing to expose orgchart service by user_id."""
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        user = None

    # if there is a user and the user is not a staff member
    # then we don't need to search for a profile in orgchart
    if user and not user.userprofile.is_staff and path == 'trace':
        return JsonResponse(None, safe=False)

    scope = UserAccessLevel.get_privacy(request, user)
    if scope not in [UserAccessLevel.STAFF, UserAccessLevel.PRIVATE]:
        return DinoErrorResponse.get_error(DinoErrorResponse.PERMISSION_ERROR)

    url_parts = urlparse.ParseResult(
        scheme='http',
        netloc=settings.DINO_PARK_ORGCHART_SVC,
        path='/orgchart/{0}/{1}'.format(path, escape_uri_path(username)),
        params='',
        query='',
        fragment=''
    )
    url = urlparse.urlunparse(url_parts)
    resp = requests.get(url)
    return JsonResponse(resp.json(), safe=False)
Example #12
0
def download_single_file(request, file_type, user_id, module_id, filename):
    module = get_object_or_404(Module, pk=module_id)
    student = get_object_or_404(Student, pk=user_id)
    try:
        project = module.project
        teacher = project.teacher
        filename = decrypt(filename)
        if file_type == 'doc':
            directory = generate_stu_doc_directory(student, teacher,
                                                   project.name, module.name)
        elif file_type == 'extend':
            directory = generate_stu_extend_directory(student, teacher,
                                                      project.name,
                                                      module.name)
        else:
            raise TypeError
        file_path = os.path.join(directory, filename)
        f = open(file_path, 'rb')
        response = FileResponse(f)
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename={}'.format(
            escape_uri_path(filename))
        return response
    except:
        return Http404
Example #13
0
def active_link(context,
                viewname,
                css_class=None,
                strict=None,
                *args,
                **kwargs):
    """
    Renders the given CSS class if the request path matches the path of the view.
    :param context: The context where the tag was called. Used to access the request object.
    :param viewname: The name of the view (include namespaces if any).
    :param css_class: The CSS class to render.
    :param strict: If True, the tag will perform an exact match with the request path.
    :return:
    """
    if css_class is None:
        css_class = getattr(settings, 'ACTIVE_LINK_CSS_CLASS', 'active')

    if strict is None:
        strict = getattr(settings, 'ACTIVE_LINK_STRICT', False)

    request = context.get('request')
    if request is None:
        # Can't work without the request object.
        return ''
    path = reverse(viewname, args=args, kwargs=kwargs)
    request_path = escape_uri_path(request.path)
    if strict:
        active = request_path == path
    else:
        active = request_path.find(path) == 0
    if active:
        return css_class
    return ''
    def get_success_url(self):
        url = reverse_lazy('company_staff', kwargs={'idb64': self.staff.idb64})

        if self.back_url:
            url += '?back_url=' + escape_uri_path(self.back_url)

        return url
Example #15
0
 def get_full_path(self):
     # RFC 3986 requires query string arguments to be in the ASCII range.
     # Rather than crash if this doesn't happen, we encode defensively.
     return "%s%s" % (
         escape_uri_path(self.path),
         ("?" + iri_to_uri(self.META.get("QUERY_STRING", ""))) if self.META.get("QUERY_STRING", "") else "",
     )
Example #16
0
def xls_to_response(xls, filename):
    response = HttpResponse(content_type='application/ms-execl')
    response[
        'Content-Disposition'] = "attachment; filename*=utf-8''{}.xls".format(
            escape_uri_path(filename))
    xls.save(response)
    return response
Example #17
0
def notice_file_download(request):
    if request.method == "GET":
        file_id = request.GET.get("file_id")
        # UPLOAD_NOTICE_FILE_DIR
        fileName = None
        if file_id == "1":
            fileName = "代码抄袭检测系统-用户手册.docx"
        elif file_id == "2":
            fileName = "代码抄袭检测系统-权限控制说明.docx"
        elif file_id == "3":
            fileName = "代码抄袭检测系统-功能说明.docx"
        elif file_id == "4":
            fileName = "代码抄袭检测系统-通知公告.docx"
        with open(os.path.join(settings.UPLOAD_NOTICE_FILE_DIR, fileName),
                  "rb") as notice_file:
            sio = BytesIO()
            while True:
                strb = notice_file.read(1024)
                if strb == b"":
                    break
                sio.write(strb)
            # notice_file.
            sio.seek(0)
            response = HttpResponse(
                sio.getvalue(),
                content_type=
                'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
            )
            response[
                'Content-Disposition'] = "attachment; filename*=utf-8''{}".format(
                    escape_uri_path(fileName))
            response.write(sio.getvalue())
            return response
    return JsonResponse(data={"status": 500, "msg": "非法请求~!"})
    def get_success_url(self):
        url = reverse_lazy('vacancy_item_vacancy_input_cancel_notice', kwargs={'idb64': self.item.idb64})

        if self.back_url:
            url += '?back_url=' + escape_uri_path(self.back_url)

        return url
Example #19
0
 def get_full_path(self):
     # RFC 3986 requires query string arguments to be in the ASCII range.
     # Rather than crash if this doesn't happen, we encode defensively.
     return '%s%s' % (
         escape_uri_path(self.path),
         ('?' + iri_to_uri(self.META.get('QUERY_STRING', ''))) if self.META.get('QUERY_STRING', '') else ''
     )
Example #20
0
def export_employee_matrix(request, person_id):
    employee = Person.objects.get(tab_number=person_id)
    questionnaire = employee.questionnaires.prefetch_related(
        'rows', 'rows__competence', 'rows__history').first()
    competencies = questionnaire.competencies.all().values_list('name',
                                                                flat=True)
    dates = set()
    dates.update(questionnaire.rows.all().values_list('date',
                                                      flat=True).distinct())
    for row in questionnaire.rows.all():
        dates.update(row.history.all().values_list('date',
                                                   flat=True).distinct())
    df = pd.DataFrame(columns=dates, index=competencies)
    for row in questionnaire.rows.all():
        # df.loc[row.competence.name, row.date] = getattr(row.competence, f'level_{row.competence_val}')
        df.loc[row.competence.name,
               row.date] = row.get_competence_level_value()
        for row_history in row.history.all():
            # df.loc[row.competence.name, row_history.date] = getattr(row.competence, f'level_{row_history.new_competence_val}')
            df.loc[
                row.competence.name,
                row_history.date] = row_history.get_competence_level_value()

    with BytesIO() as b:
        writer = pd.ExcelWriter(b, engine='openpyxl')
        df.to_excel(writer, sheet_name='Компетенции')
        writer.save()
        filename = f'{employee.fio}.xlsx'
        content_type = 'application/vnd.ms-excel'
        response = HttpResponse(b.getvalue(), content_type=content_type)
        response[
            'Content-Disposition'] = "attachment; filename=" + escape_uri_path(
                filename)
        return response
Example #21
0
def output(request, pid):
    adict = getSummaryFunction(pid)
    wb = openpyxl.Workbook()
    sheet = wb.active
    for i in range(len(adict['answer'])):
        sheet.cell(i + 1, 1).value = adict['answer'][i]['questionName']
        if adict['answer'][i]['type'] != '自由':
            for k in range(len(eval(adict['answer'][i]['option']))):
                sheet.cell(i + 1, 2 * k + 2).value = '选项' + str(
                    eval(adict['answer'][i]['option'])[k])
                sheet.cell(
                    i + 1, 2 * k +
                    3).value = str(eval(adict['answer'][i]['number'])[k]) + '人'
        else:
            count = 0
            for k in eval(adict['answer'][i]['content']):
                count += 1
                sheet.cell(i + 1, count + 1).value = k
    wb.save('temp/' + pid + '.xlsx')
    file = open('temp/' + pid + '.xlsx', 'rb')
    response = HttpResponse(file)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment;filename*=utf-8''{}".format(
        escape_uri_path(pid + '.xlsx'))
    return response
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     context['user'] = self.user
     if self.back_url:
         context['back_url'] = self.back_url
         context['escaped_back_url'] = escape_uri_path(self.back_url)
     return context
def orgchart_get_by_username(request, path, username):
    """Internal routing to expose orgchart service by user_id."""
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        user = None

    # if there is a user and the user is not a staff member
    # then we don't need to search for a profile in orgchart
    if user and not user.userprofile.is_staff and path == 'trace':
        return JsonResponse(None, safe=False)

    scope = UserAccessLevel.get_privacy(request, user)
    if scope not in [UserAccessLevel.STAFF, UserAccessLevel.PRIVATE]:
        return DinoErrorResponse.get_error(DinoErrorResponse.PERMISSION_ERROR)

    url_parts = urlparse.ParseResult(scheme='http',
                                     netloc=settings.DINO_PARK_ORGCHART_SVC,
                                     path='/orgchart/{0}/{1}'.format(
                                         path, escape_uri_path(username)),
                                     params='',
                                     query='',
                                     fragment='')
    url = urlparse.urlunparse(url_parts)
    resp = requests.get(url)
    return JsonResponse(resp.json(), safe=False)
Example #24
0
def downloadysbmodel():
    file = open('static/downloads/演算表模板.xlsx', 'rb')
    response = FileResponse(file)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(
        escape_uri_path('演算表模板.xlsx'))
    return response
Example #25
0
    def get(self, request):
        try:
            file_id = request.GET.get('file')
            courseware_obj = Courseware.objects.get(id=file_id)
            courseware_dir = os.path.join(settings.BASE_DIR, 'media/')
            # 拼接路径
            file_path = os.path.join(courseware_dir, str(courseware_obj.file))
            # 拼接下载文件名和格式
            download_path = os.path.join(
                courseware_obj.name,
                os.path.splitext(courseware_obj.file.name)[-1])

            # 使用生成器读取文件,可用于读取大文件
            def file_iterator(file_name, chunk_size=512):
                with open(file_name, 'rb') as f:
                    while True:
                        c = f.read(chunk_size)
                        if c:
                            yield c
                        else:
                            break

            response = StreamingHttpResponse(file_iterator(file_path))
            response['Content-Type'] = 'application/octet-stream'
            response[
                'Content-Disposition'] = 'attachment;filename="{0}"'.format(
                    escape_uri_path(download_path))
            return response
        except Exception as e:
            print('DownloadFile出错', e)
            return render(request, 'courseware.html')
Example #26
0
    def get_response(self, response, context, *args, **kwargs):
        has_view_perm = self.has_model_perm(self.model, 'view')
        if not has_view_perm:
            raise PermissionDenied

        export_format = self.request.GET.get('file_format')

        if not export_format:
            messages.warning(self.request,
                             _('You must select an export format.'))
        else:
            formats = self.get_export_formats()
            file_format = formats[int(export_format)]()
            queryset = self.get_export_queryset(self.request, context)
            export_data = self.get_export_data(file_format,
                                               queryset,
                                               request=self.request)
            content_type = file_format.get_content_type()
            # Django 1.7 uses the content_type kwarg instead of mimetype
            try:
                response = HttpResponse(export_data, content_type=content_type)
            except TypeError:
                response = HttpResponse(export_data, mimetype=content_type)
            filename = self.get_export_filename(file_format)
            response['Content-Disposition'] = "attachment; filename={}".format(
                escape_uri_path(filename).encode().decode('ISO-8859-1'))

            post_export.send(sender=None, model=self.model)
            return response
Example #27
0
 def _get_full_path(self, path, force_append_slash):
     # RFC 3986 requires query string arguments to be in the ASCII range.
     # Rather than crash if this doesn't happen, we encode defensively.
     return '%s%s%s' % (escape_uri_path(path), '/' if force_append_slash
                        and not path.endswith('/') else '',
                        ('?' + iri_to_uri(self.META.get('QUERY_STRING', ''))
                         ) if self.META.get('QUERY_STRING', '') else '')
 def save(self, *args, **kwargs):
     if self.publish_path:
         self.publish_path = escape_uri_path(self.publish_path)
     else:
         self.publish_path = "/{}/{}/".format(
             datetime.today().strftime("%Y-%m-%d"), self.id.hex[:8])
     super().save(*args, **kwargs)
Example #29
0
 def _join_group_settings_link(self, layers, *args):
     return ','.join(set([
         a if 'link' not in a else
         '<a href="{0}"/>{1}</a>'.format(escape_uri_path(a['link']), escape(a['name']))
         for a in [layer.layer_settings_with_default(*args) for layer in self.layers]
         if a
     ])) or None
Example #30
0
    def download(self, *args, **kwargs):
        # 1. 手动创建报告
        instance = self.get_object()
        html = instance.html

        report_path = settings.REPORTS_DIR
        report_full_path = os.path.join(report_path, instance.name) + '.html'
        with open(report_full_path, 'w', encoding='utf-8') as file:
            file.write(html)

        # 2. 读取创建的报告并返回给前端
        # 如果要提供前端用户能够下载文件, 那么需要在响应头中添加如下字段:
        # Content-Type = application/octet-stream
        # Content-Disposition = attachment; filename*=UTF-8'' 文件名
        response = StreamingHttpResponse(get_file_content(report_full_path))
        # 对文件名进行转义
        report_path_final = escape_uri_path(instance.name + '.html')
        # StreamingHttpResponse对象类似于dict字典
        # 如果以字典的形式添加key-value, 那么添加的是响应头信息
        response['Content-Type'] = 'application/octet-stream'
        response[
            "Content-Disposition"] = "attachment; filename*=UTF-8''{}".format(
                report_path_final)

        return response
Example #31
0
 def settings_link(layer, *args):
     layer_settings = layer.layer_settings_with_default(*args)
     if 'link' in layer_settings:
         return '<a href="{0}"/>{1}</a>'.format(
             escape_uri_path(layer_settings['link']),
             escape(layer_settings['name']))
     return layer_settings
Example #32
0
def get_video_file_path(instance, filename, version=0):
    """
    Return the full path for storing an uploaded video
    :param instance: A GlossVideo instance
    :param filename: the original file name
    :param version: the version to determine the number of .bak extensions
    :return: 
    """

    idgloss = instance.gloss.idgloss

    video_dir = settings.GLOSS_VIDEO_DIRECTORY
    try:
        dataset_dir = instance.gloss.lemma.dataset.acronym
    except:
        dataset_dir = ""
    two_letter_dir = signbank.tools.get_two_letter_dir(idgloss)
    filename = idgloss + '-' + str(
        instance.gloss.id) + '.mp4' + (version * ".bak")

    path = os.path.join(video_dir, dataset_dir, two_letter_dir, filename)
    if hasattr(settings, 'ESCAPE_UPLOADED_VIDEO_FILE_PATH'
               ) and settings.ESCAPE_UPLOADED_VIDEO_FILE_PATH:
        from django.utils.encoding import escape_uri_path
        path = escape_uri_path(path)
    return path
Example #33
0
def downloadsoft(request):
    '''下载文件到本地'''
    def file_iterator(file_name, chunk_size=1024):
        with open(file_name, 'rb') as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    onefile = SoftFiles.objects.get(id=request.GET.get('fileid'))

    onefile.accessnums += 1
    onefile.save()
    softobj = onefile.soft_list
    softobj.accessnums += 1
    softobj.save()  #更新访问列表

    the_file_name = onefile.uploadfile.path
    file_name = onefile.name
    response = StreamingHttpResponse(file_iterator(the_file_name))
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment;filename*=''utf-8{0}".format(
        escape_uri_path(file_name))
    #下载中文路径文件不会乱码

    return response
Example #34
0
def downloadfile(request):
    '''下载文件到本地'''
    def file_iterator(file_name, chunk_size=1024):
        with open(file_name, 'rb') as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    onefile = BookFiles.objects.get(id=request.GET.get('fileid'))
    onefile.accessnums += 1
    onefile.save()
    bookobj = onefile.book_list
    bookobj.accessnums += 1
    bookobj.save()

    the_file_name = onefile.uploadfile.path
    file_name = onefile.name
    response = StreamingHttpResponse(file_iterator(the_file_name))
    response['Content-Type'] = 'application/octet-stream'
    #response['Content-Disposition'] = 'attachment;filename="{0}"'.format(urlquote(file_name))
    response['Content-Disposition'] = "attachment;filename*=''utf-8{0}".format(
        escape_uri_path(file_name))  #解决下载中文文件路径问题

    return response
Example #35
0
def download_template(request):
    resultFile = open(BASE_DIR + "/APITest/模板.xlsx", 'rb')

    response = FileResponse(resultFile)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment;filename*=utf-8''{}".format(escape_uri_path("demo.xlsx"))
    return response
Example #36
0
 def _get_full_path(self, path, force_append_slash):
     # RFC 3986 requires query string arguments to be in the ASCII range.
     # Rather than crash if this doesn't happen, we encode defensively.
     return '%s%s%s' % (
         escape_uri_path(path),
         '/' if force_append_slash and not path.endswith('/') else '',
         ('?' + iri_to_uri(self.META.get('QUERY_STRING', ''))) if self.META.get('QUERY_STRING', '') else ''
     )
Example #37
0
def get_full_path(request, force_append_slash=False):
    """
    Copied from django.http.request.get_full_path (django 1.9) to support
    older versions of django.
    """
    # RFC 3986 requires query string arguments to be in the ASCII range.
    # Rather than crash if this doesn't happen, we encode defensively.
    return "%s%s%s" % (
        escape_uri_path(request.path),
        "/" if force_append_slash and not request.path.endswith("/") else "",
        ("?" + iri_to_uri(request.META.get("QUERY_STRING", ""))) if request.META.get("QUERY_STRING", "") else "",
    )
Example #38
0
    def url_with_query_string(self, url=None, query_string=None):
        """
        Returns the current URL with its query string.

        Both the URL and the query string can be overriden.
        """
        url = url or escape_uri_path(self.request.path)
        if query_string is None:
            query_string = self.request.META.get('QUERY_STRING', '')
        if query_string:
            url += '?' + query_string
        return url
def _convert_file_to_url(filename, remote_storage=False):
    url = [settings.SENDFILE_URL]

    if remote_storage:
        url.insert(1, filename)
        return escape_uri_path(u'/'.join(url))
    else:
        relpath = os.path.relpath(filename, settings.SENDFILE_ROOT)
        while relpath:
            relpath, head = os.path.split(relpath)
            url.insert(1, head)
        return u'/'.join(url)
    def move_view(self, request, object_id, direction):
        qs = self._get_changelist(request).get_queryset(request)

        obj = get_object_or_404(self.model, pk=unquote(object_id))
        obj.move(direction, qs)

        # guts from request.get_full_path(), calculating ../../ and restoring GET arguments
        mangled = '/'.join(escape_uri_path(request.path).split('/')[0:-3])
        redir_path = '%s%s%s' % (mangled, '/' if not mangled.endswith('/') else '',
            ('?' + iri_to_uri(request.META.get('QUERY_STRING', ''))) if request.META.get('QUERY_STRING', '') else '')

        return HttpResponseRedirect(redir_path)
Example #41
0
 def wikidata_entry_dict(self, wikidata_entry):
     result = {
         'wikidata_id': wikidata_entry.wikidata_id,
     }
 
     if 'Q5' in wikidata_entry.instance_of.split(';'):
         result.update({
             'date_of_birth': wikidata_entry.date_of_birth,
             'date_of_birth_accuracy': wikidata_entry.date_of_birth_accuracy,
             'date_of_death': wikidata_entry.date_of_death,
             'date_of_death_accuracy': wikidata_entry.date_of_death_accuracy,
         })
 
     if not self.restrict_fields:
         result.update({
             'url': u'https://www.wikidata.org/wiki/{name}'.format(name=encoding.escape_uri_path(wikidata_entry.wikidata_id)),
             'instance_of': wikidata_entry.instance_of.split(';'),
             'burial_plot_reference': wikidata_entry.burial_plot_reference,
             'wikimedia_commons_category': wikidata_entry.wikimedia_commons_category,
         })
     
         if 'Q5' in wikidata_entry.instance_of.split(';'):
             result.update({
                 'sex_or_gender': wikidata_entry.sex_or_gender,
                 'occupations': wikidata_entry.occupations.split(';'),
                 'wikimedia_commons_grave_category': wikidata_entry.wikimedia_commons_grave_category,
             })
         else:
             result.update({
                 'grave_of': wikidata_entry.grave_of_wikidata.split(';'),
             })
 
     localizations = []
     if self.languages:
         for language in self.languages:
             wikidata_localized_entry = wikidata_entry.localizations.filter(language=language).first()
             if wikidata_localized_entry:
                 localization = {
                     'id': wikidata_localized_entry.pk,
                     'language_code': language.code,
                     'name': wikidata_localized_entry.name,
                     'sorting_name': wikidata_localized_entry.sorting_name(),
                     'description': wikidata_localized_entry.description,
                     'wikipedia': self.wikipedia_page_dict(wikidata_localized_entry),
                 }
                 localizations.append(localization)
     
     result['localizations'] = localizations
     
     return result
Example #42
0
    def move_view(self, request, object_id, direction):
        obj = get_object_or_404(self.model, pk=unquote(object_id))

        if direction not in ('up', 'down', 'top', 'bottom'):
            raise Http404

        getattr(obj, direction)()

        # guts from request.get_full_path(), calculating ../../ and restoring GET arguments
        mangled = '/'.join(escape_uri_path(request.path).split('/')[0:-3])
        redir_path = '%s%s%s' % (mangled, '/' if not mangled.endswith('/') else '',
            ('?' + iri_to_uri(request.META.get('QUERY_STRING', ''))) if request.META.get('QUERY_STRING', '') else '')

        return HttpResponseRedirect(redir_path)
Example #43
0
def search_get_profile(request, username, scope=None):
    """Internal routing to expose search by user ID."""
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        user = None
    if not scope:
        scope = UserAccessLevel.get_privacy(request, user)
    url_parts = urlparse.ParseResult(
        scheme='http',
        netloc=settings.DINO_PARK_SEARCH_SVC,
        path='/search/get/{}/{}'.format(scope, escape_uri_path(username)),
        params='',
        query='',
        fragment=''
    )
    url = urlparse.urlunparse(url_parts)
    resp = requests.get(url)
    return JsonResponse(resp.json(), safe=False)
Example #44
0
 def wikimedia_commons_file_dict(self, wikimedia_commons_file):
     if wikimedia_commons_file:
         result = {
             'wikimedia_commons_id': wikimedia_commons_file.wikimedia_commons_id,
             'author': wikimedia_commons_file.author,
             'license': wikimedia_commons_file.license,
             'url_512px': wikimedia_commons_file.url_512px,
             'url_1024px': wikimedia_commons_file.url_1024px,
             'url_2048px': wikimedia_commons_file.url_2048px,
         }
         
         if not self.restrict_fields:
             result.update({
                 'url': u'https://commons.wikimedia.org/wiki/{name}'.format(name=encoding.escape_uri_path(wikimedia_commons_file.wikimedia_commons_id)),
             })
     else:
         result = None
     
     return result
Example #45
0
 def wikimedia_commons_category_dict(self, wikimedia_commons_category):
     if wikimedia_commons_category:
         result = {
             'wikimedia_commons_id': wikimedia_commons_category.wikimedia_commons_id,
             'category_members': [{'wikimedia_commons_id': member} for member in wikimedia_commons_category.category_members_list()],
         }
         
         if wikimedia_commons_category.main_image:
             result['main_image'] = {
                 'wikimedia_commons_id': wikimedia_commons_category.main_image,
             }
         else:
             result['main_image'] = None
 
         if not self.restrict_fields:
             result.update({
                 'url': u'https://commons.wikimedia.org/wiki/{name}'.format(name=encoding.escape_uri_path(wikimedia_commons_category.wikimedia_commons_id)),
             })
     else:
         result = None
     
     return result
Example #46
0
    def get_full_path_without_slash(self, request):
        """
        Return the full path of the request with a trailing slash removed.

        Raise a RuntimeError if settings.DEBUG is True and request.method is
        POST, PUT, or PATCH.
        """
        new_path = '%s%s' % (
            escape_uri_path(request.path[:-1]),
            ('?' + iri_to_uri(request.META.get('QUERY_STRING', ''))) if request.META.get('QUERY_STRING', '') else ''
        )
        if settings.DEBUG and request.method in ('POST', 'PUT', 'PATCH'):
            raise RuntimeError((""
                "You called this URL via %(method)s, but the URL ends "
                "in a slash and you don't have APPEND_SLASH set. Django can't "
                "redirect to the non-slash URL while maintaining %(method)s data. "
                "Change your form to point to %(url)s (note no trailing "
                "slash), or set APPEND_SLASH=True in your Django settings." % {
                    'method': request.method,
                    'url': request.get_host() + new_path,
                }
            ))
        return new_path
Example #47
0
 def dispatch(self, request, *args, **kwargs):
     if not request.user.is_authenticated():
         url = reverse("login") + "?from=" + escape_uri_path(request.path)
         return redirect(url)
     return super().dispatch(request, *args, **kwargs)
Example #48
0
    def post(self, request, *args, **kwargs):

        try:
            self.object = self.get_object()
        except NotEnrolled:
            return redirect('micourses:notenrolled', 
                            course_code=self.course.code)
        except NotInstructor:
            return redirect('micourses:coursemain', 
                            course_code=self.course.code)

        
        # possible actions: update, add_excused, delete_excused
        action = request.POST.get("action")

        self.last_attendance_date = self.course.last_attendance_date

        message = ""

        if action=="add_excused":
            date_form = DateForm({'date':  request.POST['attendance_date']})
            valid_day = False
            if date_form.is_valid():
                attendance_date = date_form.cleaned_data['date']

                # check if date is a class day
                for class_day in self.course.attendancedate_set.all():
                    if attendance_date == class_day.date:
                        valid_day = True
                        break
            else:
                attendance_date = None

            if valid_day:
                with transaction.atomic(), reversion.create_revision():
                    sa, created = self.student_enrollment.studentattendance_set\
                        .get_or_create(
                        date=attendance_date, defaults = {'present': EXCUSED})

                    if not created:
                        sa.present=EXCUSED
                        sa.save()

                message = "Added excused absence for %s on %s." % \
                          (self.student, attendance_date.strftime("%B %d, %Y"))

                from django.utils.encoding import escape_uri_path
                url = reverse('micourses:update_individual_attendance',
                              kwargs={'course_code': self.course.code})
                url += "?student=%s&message=%s" % \
                       (self.student.id, escape_uri_path(message))
                return redirect(url) 

            else:
                
                message = "Excused absence not added.  " \
                          + "%s is not a valid course day" % \
                          (request.POST['attendance_date'])
            
                # get attendance forms with data from database
                self.get_forms()


        elif action=="delete_excused":
            
            excused_to_delete = request.POST.getlist("excused_date")

            n_deleted=0
            deleted_date=None
            for excused_id in excused_to_delete:
                try:
                    excused=self.student_enrollment.studentattendance_set.get(
                        id=excused_id, present=EXCUSED)
                except ObjectDoesNotExist:
                    pass
                else:
                    deleted_date = excused.date
                    with transaction.atomic(), reversion.create_revision():
                        excused.delete()
                    n_deleted +=1

            if n_deleted == 1:
                message = "Deleted 1 excused absence for %s: %s." % \
                          (self.student, deleted_date.strftime("%B %d, %Y"))
            else:
                message = "Deleted %s excused absences for %s." % \
                          (n_deleted, self.student)

            from django.utils.encoding import escape_uri_path
            url = reverse('micourses:update_individual_attendance',
                          kwargs={'course_code': self.course.code})
            url += "?student=%s&message=%s" % \
                   (self.student.id, escape_uri_path(message))
            return redirect(url) 



        elif action=="update":
            # get attendance forms populated with POST data
            self.get_forms(request.POST)

            if not self.last_attendance_date:
                message = "Last attendance date for course not set.  Cannot update attendance."
            elif self.attendance_dates_form.is_valid():
                with transaction.atomic(), reversion.create_revision():
                    self.student_enrollment.studentattendance_set\
                        .filter(date__lte = self.last_attendance_date).delete()
                for (date, present) in \
                    self.attendance_dates_form.date_attendance():
                    if present:
                        self.student_enrollment.studentattendance_set\
                                        .create(date=date, present=present)

                message = "Updated attendance of %s." % self.student

                from django.utils.encoding import escape_uri_path
                url = reverse('micourses:update_individual_attendance',
                              kwargs={'course_code': self.course.code})
                url += "?student=%s&message=%s" % \
                       (self.student.id, escape_uri_path(message))
                return redirect(url) 
                 
        
        context = self.get_context_data(object=self.object)

        context['message'] = message

        return self.render_to_response(context)
Example #49
0
    def post(self, request, *args, **kwargs):

        try:
            self.object = self.get_object()
        except NotEnrolled:
            return redirect('micourses:notenrolled', 
                            course_code=self.course.code)
        except NotInstructor:
            return redirect('micourses:coursemain', 
                            course_code=self.course.code)


        # update attendance, assuming date is valid
        date_form = DateForm({'date':  request.POST['attendance_date']})
        valid_day = False

        if date_form.is_valid():
            attendance_date = date_form.cleaned_data['date']

            # check if date is a class day
            for class_day in self.course.attendancedate_set.all():
                if attendance_date == class_day.date:
                    valid_day = True
                    break
            
        else:
            attendance_date = None

        if valid_day:
            with transaction.atomic(), reversion.create_revision():

                for ce in self.course.courseenrollment_set.filter(withdrew=False):
                    present=request.POST.get('student_%s' % ce.id, ABSENT)
                    try:
                        present = int(present)
                    except ValueError:
                        present = ABSENT

                    sa, created = ce.studentattendance_set.get_or_create(
                        date=attendance_date,
                        defaults = {'present': present})
                    # don't override an excused absence with an absence
                    if not created and \
                       not (sa.present == EXCUSED and present==ABSENT):
                        sa.present = present
                        sa.save()

                if not self.course.last_attendance_date \
                        or attendance_date > self.course.last_attendance_date:
                    self.course.last_attendance_date = attendance_date
                    self.course.save()


            message = "Attendance updated for %s" % \
                      attendance_date.strftime("%B %d, %Y")

            from django.utils.encoding import escape_uri_path
            url = reverse('micourses:update_attendance',
                          kwargs={'course_code': self.course.code})
            url += "?message=%s" % escape_uri_path(message)
            return redirect(url) 


        else:
            context = self.get_context_data(object=self.object)

            context['message'] = "Attendance not updated.  " \
                + "%s is not a valid course day" % \
                (request.POST['attendance_date'])

            return self.render_to_response(context)
Example #50
0
from __future__ import unicode_literals
Example #51
0
def create_url(survey_inst):
    id_str, c = encode_id(survey_inst.id)
    return"{}?id={}&c={}".format(reverse('survey:survey_invitation'), escape_uri_path(id_str),
                                   escape_uri_path(c))
Example #52
0
 def openstreetmap_element_dict(self, openstreetmap_element):
     result = {
         'openstreetmap_id': openstreetmap_element.openstreetmap_id,
         'type': openstreetmap_element.type,
         'latitude': openstreetmap_element.latitude,
         'longitude': openstreetmap_element.longitude,
     }
 
     if not self.restrict_fields:
         result.update({
             'url': u'https://www.openstreetmap.org/{type}/{id}'.format(type=openstreetmap_element.type, id=encoding.escape_uri_path(openstreetmap_element.openstreetmap_id)),
             'name': openstreetmap_element.name,
             'sorting_name': openstreetmap_element.sorting_name,
             'nature': openstreetmap_element.nature,
             'wikidata': openstreetmap_element.wikidata.split(';'),
             'wikimedia_commons': openstreetmap_element.wikimedia_commons,
         })
     
     return result
 def check_login_redirect(self, attempted_url):
     response = self.client.get(attempted_url)
     redirect_url = '%(login_url)s?next=%(attempted_url)s' % \
         {'login_url': reverse('login'),
          'attempted_url': escape_uri_path(attempted_url)}
     self.assertRedirects(response, redirect_url)
Example #54
0
 def wikipedia_page_dict(self, wikidata_localized_entry):
     wikipedia_page = WikipediaPage.objects.filter(wikidata_localized_entry=wikidata_localized_entry).first()
     if wikipedia_page:
         result = {
             'id': wikipedia_page.pk,
             'title': wikipedia_page.title,
             'intro': wikipedia_page.intro,
         }
         
         if not self.restrict_fields:
             result.update({
                 'default_sort': wikipedia_page.default_sort,
                 'url': u'https://{language}.wikipedia.org/wiki/{name}'.format(language=wikidata_localized_entry.language.code, name=encoding.escape_uri_path(wikidata_localized_entry.wikipedia)),
             })
     else:
         result = None
     
     return result
Example #55
0
def redirect_not_usr(request):
    if not request.user.is_authenticated():
        url = reverse("authentication:login") + "?from=" + escape_uri_path(request.path)
        return redirect(url)
    else:
        return False