Beispiel #1
0
def add_by_paste(request, code_base_id):
    current_page = 'code'
    page_title = u'代码分享'
    try:
        base = Base.objects.get(id=code_base_id, author=request.user)
    except Base.DoesNotExist:
        raise Http404()

    # 如果已经发布过,则是修改代码
    if base.display == True:
        page_title = '修改代码'
        button = '修改代码完毕,马上保存'
    else:
        page_title = '代码分享第2步:粘贴/上传代码'
        button = '添加代码完毕,马上发布'

    # 判断是否是作者本人进入该页面
    if request.user <> base.author:
        raise Http404()

    # 处理GET请求
    if request.method == 'GET':
        form = PasteForm()
        file_form = FileForm()
        codes = Code.objects.filter(base=base)
        zips = Zip.objects.filter(base=base)
        return render('code_add_by.html',
                      locals(),
                      context_instance=RequestContext(request))

    # 处理POST请求
    else:
        languag_id = request.POST.get('language', 1)
        content = request.POST.get('content', '')

        # 处理分类
        try:
            language = Language.objects.get(id=languag_id)
        except Category.DoesNotExist:
            messages.error(request, "你选择的语言不存在")
            return HttpResponseRedirect('/code/add/%d/' % base.id)

        # 检查代码长度
        if 0 < len(content) <= 20:
            messages.error(request, "代码长度不够20字符")
            return HttpResponseRedirect('/code/add/%d/' % base.id)

        try:
            new_code = Code(base=base,
                            language=language,
                            content=content,
                            name='代码片段')
            new_code.save()
        except Exception, e:
            messages.error(request, "保存数据时出现错误")

        return HttpResponseRedirect('/code/add/%d/' % base.id)
Beispiel #2
0
def add_by_file(request, base_id):
    try:
        base = Base.objects.get(id=base_id, author=request.user)
    except Base.DoesNotExist:
        raise Http404()
    if request.method == 'GET':
        return HttpResponseRedirect('/code/add/%d/' % base.id)
    elif 'file_upload' in request.FILES:
        file = request.FILES['file_upload']
    else:
        messages.warning(request, '请选择文件')
        return HttpResponseRedirect('/code/add/%d/' % base.id)

    #检查文件大小
    file_size = 0
    for chunk in file.chunks():
        file_size += len(chunk)
        if file_size >= 1024 * 1024 * 5:
            messages.error(request, '文件大小超过限制')
            return HttpResponseRedirect('/code/add/%d/' % base.id)

    # 处理.py 文件
    lans = Language.objects.filter(~Q(suffix=''))
    code_file_list = [lan.suffix for lan in lans]
    zip_file_list = ['tar', 'zip', 'rar', 'gz']
    file_suffix = file.name.split('.')[-1]
    if file_suffix in code_file_list:
        try:
            language = Language.objects.get(suffix=file.name.split('.')[-1])
        except Language.DoesNotExist:
            messages.error(request, '不支持你上传的文件')
            return HttpResponseRedirect('/code/add/%d/' % base.id)
        file.open()
        content = file.read()
        if len(content) < 20:
            messages.error(request, "代码长度少于20字符")
            return HttpResponseRedirect('/code/add/%d/' % base.id)
        code = Code(base=base,
                    content=content,
                    language=language,
                    name=file.name)
        try:
            code.save()
        except Exception, e:
            messages.error(request, '保存代码时,服务器出现错误:' + str(e.message))
        else:
            messages.success(request, '上传python文件成功!')
        return HttpResponseRedirect('/code/add/%d/' % base.id)