一个可重用的应用程序,可以优雅地处理用户可能上传的文件,例如

django-user-media的Python项目详细描述


作为个人资料图片、FOTO相册等。

主页:https://github.com/bitmazk/django user media
作者:martin brochhaus
作者电子邮件:martin.brochhaus@bitmazk.com
许可证:MIT许可证播放音频、视频或图像等内容。如果默认情况下,该内容不应该对全世界可见,这会引发许多问题。

保留
原始文件名可能并不是一个好主意,因为它们可能会干扰服务器的文件系统,并为黑客打开
大门,黑客可能会试图对您的
``/media/user_profiles/``施加暴力,以窃取一些有价值的文件。

Django的filefield的
`` upload_to``属性的函数我认为这可能是一个可重复使用的
应用程序的候选项。



*django libs
*简单的缩略图
*django通用位置
*simplejson



设置github的最新提交:

$pip install-e git://github.com/bitmazk/django user media.git\egg=user\media

ls',
'django_libs',
'generic_positions',





运行迁移以创建应用程序的数据库表::

$./manage.py迁移用户媒体



----




``用户配置文件``模型,您需要向该模型添加一个``avatar``字段。

从django.contrib.contenttypes导入字段



class userprofile(models.model):

user=models.foreignkey(
getattr(settings,'auth_user_model','auth.user'),


avatar=fields.generic关系(
"user-media.usermediaimage",




add property
+++++++br/>

现在您可以通过这样做获得属于a
``user profile``的所有上载图像::

profile=userprofile.objects.get(pk=1)
images=profile.avatar.all()

类用户配置文件(models.model):

@property
def avatar(self):
尝试:
返回self.avatar.all()[0]
索引器除外:
返回none


添加到更新表单的链接
+++++++++++++++++ATE的上下文)::

<;a href="{%url"user_media_image_create"content_type="userprofile"object_id=object.pk%}">;上载图片<;/a>;


请注意,"userprofile"是您的用户prof的"contenttype"的模型名。ile``模型将返回。你可以用`./manage.py
shell``来解决这个问题,例如:

$./manage.py shell
in[1]:from django.contrib.contenttypes.models导入contenttype
in[2]:from your app.models导入userprofile
in[3]:contenttype.objects.get_for_model(userprofile).model
out[1]:u"userprofile"

访问该链接时,用户将看到图像上载表单。您可能希望覆盖该模板(``user-media/user media image-form.html``)。


上传图像后,视图应重定向回您的``userprofile``的绝对url
。如果要重定向到另一个url,可以通过post或get提供一个"next"url参数:

<;a ref="{%url"user_media_image_create"content_type="userprofile"object_id=object.pk%}?next=/foo/bar">;上传图片<;/a>;



display images
++++++++++n.在您的
``userprofile``详细视图中,您可以显示虚拟形象(如果可用):

{%if object.avatar%}
<;img src={{media戋url}}{{object.avatar.image}/>;
{%endif%}


dele创建并编辑图像
+++++++++++++++++++++++++++++++++++++++++++


或在"用户配置文件"更新视图中,您可以显示一个链接,以上载
新图像或删除现有图像::

{%(如果是form.instance.get\avatar%}
<;p>;<;img src="{media\u url}}{{form.instance.avatar.image}"/>;<;p>;
<;a href="{%url"用户媒体图像删除"pk=form.instance.avatar.pk%}">;删除图片<;/a>;
{%else%}
<;a href="{%url"用户媒体图像创建"content_type="user profile"object_id=form.instance.pk%}">;添加配置文件图片<;/a>;
{%endif%}


此示例中的删除链接将呈现
``user_media/usermedia image_confirm_delete.html``模板,您可能希望覆盖项目。

自己的模型表单
+++++++++++++++++++++++++++++++++++++++++++++++++++++++


通常,您可能不想提供用于上载图像的专用表单,但
您可能希望在内容
对象的模型表单上有一个图像字段。在这种情况下,您可以从"usermediaima"继承geformmixin`::

image_label=('image')
需要用户媒体图像=false
image_field_name='用户媒体图像'
image_widget=forms.clearablefileinput();可选

mixin将动态地向表单添加一个名为
"user_media_image"的"forms.imagefield"。通过在窗体类上设置"image\u label"属性,可以控制该字段的标签。还可以通过将"require_user_media_image"属性设置为"true"强制使用

----


jquery模式中的窗体。为了简化工作,当请求是ajax调用时,视图将返回一个不同的模板。

_确认"删除.html`.

/>或者,您可以添加一个名为"用户可以编辑"的函数::


def user可以编辑(self,user):
"
"函数,如果允许用户编辑实例,则返回true。

"
"如果self.users.all()中的用户:
返回true
返回false



ajax多图像上载
ing
模板:


user_media/partials/image_upload.html
user_media/partials/image.html

然后添加样式和jquery脚本。我们已经使用了blueimp的文件上传,因此您可以通过添加jquery&jquery ui和脚本来工作:


user-media/partials/image-upload-scripts.html


tials/image_upload.html"with object=request.user.get_profile maximum="5"hide_cutout="0"mode="multiple"c_type="profile"%}


您可以使用变量"hide_cutout="0"隐藏触发jquery裁剪功能的链接。


n使用以下设置限制最大上载::


user_media_upload_maximum=5



----


只需使用模板并添加所需的变量:

{%包括"user_media/partials/image_upload.html"和object=request.user.get_profile field='logo'mode="single"show_main_thumb="true"%}

新加载图像的额外类
如果使用单个图像上载,则新上载的图像将替换当前"userMediaImageUploaded"元素中的"img"元素。
有时ght在您的图像上有特殊的css类,您可能希望
将这些类再次添加到刚刚添加到dom的"img"中。在
中,为了定义应该添加到新加载的映像中的类,只需将"data img class="myClass1 myClass2"属性添加到具有
userMediaImageUploaded"类的元素中即可。

jquery image cropping-————————————————————————————————————————————————————————————————————————首先,添加一个新的缩略图
processor``user-media.processors.crop-box`:


thumbnail-processors=(
'user-media.processors.crop-box',

'easy-thumbnails.processors.colorspace',
'简单缩略图.处理器.自动裁剪',
'简单缩略图.处理器.缩放和裁剪',
'简单缩略图.处理器.过滤器',



{%包括"user_media/partials/crop.html"%}

<;script src="{%static"django libs/js/getcookie.js"%}">;
<;script src="{%static"user_media/js/libs/jquery.jcrop.js"%}">;

y通过覆盖"crop.html"中的输入字段来设置。

check out:http://deepliquid.com/content/jcrop.html

能够选择帧。如果她
然后保存裁剪区域,坐标将保存到
``usermediaimage``实例中。


l image.image image.small廑size box=image.box廑coordinates%}



----



e自动生成的小缩略图,在上传/裁剪后进行处理。





缩略图,在
上传/裁剪后进行处理。





参与
----


如果您想参与此项目,请执行以下步骤

…代码块::bash

fork这个存储库
测试
git add。&;git commit
git push-u origin feature\u branch
向我们发送功能分支的拉取请求

要运行测试,只需执行"tox"。这将安装两个新的
环境(适用于django 1.8和django 1.9),并对这两个
环境运行测试。


关键字:django、common、reusable、media、files、upload
平台:与操作系统无关

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSpring重定向请求处理程序   SwingJava:拆分字符串并将其放入文本区域的   Java:标记“”上出现语法错误,此标记后面应为表达式   web服务Java RestService从日志文件写入和读取数据   java如何将ArrayList<String>转换为char数组,然后向后打印每个单词?   java SimpleDataFormat解析返回年终日期   加密Java aes解密bytebuffer,包括填充为空字节   java有没有办法从特定的if语句调用变量?   java从更新返回到渲染   spring GRPC Java登录测试   java为什么下面的代码不工作(StringBuffer.toString!=null)   java是一种可行的模式吗?   使用Spring集成测试的JavaOSGi片段   java jCommander为未知和未使用的值引发异常?   在imageView的editText中输入的java图像URL