开发实践7_文件上传

以下学习 朔宁夫 开发课(Python)。

文件上传&表单类

一 Django文件上传

表单上传。

前端:表单设置 

enctype = "multipart/form-data"

后端:获取上传文件对象

upload_dile = request.FILES.get("文件域名称")

后端:分块写入服务器

for chunk in upload_file.chunks():

        目标文件.write(chunk)

演示:

python manage.py startapp upload_app

setting // installed_apps

total urls // path('upload_app/', include('upload_app.urls', namespace='upload')),

sub urls // 

app_name = "upload"

urlpatterns = [
    path("upload/", upload_view, name="up"),
    ]

template //

<form action="{% url 'upload:up' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    Upload file: <br>
    <input type="file" name="a_file"><br>
    <input type="submit" value="UPLOAD">
</form>

views //

def upload_view(request):
    #BASE_DIR = 'D:/webDevelopment/exercises/djangoProject'
    if request.method == "GET":
        return render(request, "upload.html")
    if request.method == "POST":
        upload_obj = request.FILES.get("a_file")
        file_name = str(int(time.time()) * 1000) + upload_obj.name
        #path = os.path.join(BASE_DIR, "/upload_files", upload_obj.name)  # , file_name
        path = os.path.join('D:/webDevelopment/exercises/djangoProject/upload_files', file_name)
        print(path)
        with open(path, 'wb') as f:
            for chunk in upload_obj.chunks():
                f.write(chunk)
                print('flag_up_w')

        data = {
            "msg": "Data Uploaded."
        }
        return JsonResponse(data)

# 上传同名文件会覆盖。加入时间戳可。

admin 上传:

class Anime(models.Model):
    name = models.CharField(max_length=32, verbose_name='figure name')
    impress = models.FloatField(verbose_name="index")
    #  img = models.FilePathField()
    img = models.ImageField(verbose_name="img")

    class Meta:
        verbose_name = "figure"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

#注册

models = [
    Anime,
]

admin.site.register(models)

setting //
MEDIA_ROOT = os.path.join(BASE_DIR, "upload_files")
MEDIA_URL = '/media/'

二 表单类

简化编码。使用步骤:继承→自定义类属性→调用→模板渲染。

app下form.py //

from django import forms

class RegisterForm(forms.Form):
    reg_name = forms.CharField(max_length=10, label="user_name")
    reg_pwd = forms.CharField(max_length=20, label="pwd", widget=forms.PasswordInput())  # 组件
    reg_home = forms.ChoiceField(label="area", choices=((1, 'alive'), (2, 'dead'), (3, 'walk_dead')))
    gender = forms.ChoiceField(label='gender', choices=((1, 'Female'), (2, 'Male')), widget=forms.RadioSelect())

views //

def form_view(request):
    if request.method == "GET":
        form = RegisterForm()
        return render(request, "form.html", locals())

    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data["reg_name"]
            home = form.cleaned_data["reg_home"]
            gender = form.cleaned_data["gender"]
            data = {
                "name": name,
                "home": home,
                "gender": gender,
            }
            return JsonResponse(data)
        else:
            return JsonResponse({"msg": "Fail"})

template //

<form action="{% url 'upload:reg' %}" method="post">
    {% csrf_token %}
    {
  { form.as_p }}
    <input type="submit" value="register">
</form>

相关推荐

  1. 开发实践7_文件

    2024-01-18 13:56:03       55 阅读
  2. 文件实现

    2024-01-18 13:56:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 13:56:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 13:56:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 13:56:03       87 阅读
  4. Python语言-面向对象

    2024-01-18 13:56:03       96 阅读

热门阅读

  1. Python基础篇 - 列表推导式(List Comprehension)

    2024-01-18 13:56:03       56 阅读
  2. 华为HCIE课堂笔记第十六章 Qos基本原理

    2024-01-18 13:56:03       47 阅读
  3. helm中的_helpers.tpl文件语法解析

    2024-01-18 13:56:03       56 阅读
  4. Android 实现跑马灯效果

    2024-01-18 13:56:03       50 阅读
  5. 阿里云1T空间服务器多少钱一年?

    2024-01-18 13:56:03       66 阅读
  6. sql编程——join,concat,except,union all的使用举例。

    2024-01-18 13:56:03       47 阅读
  7. iOS 字符串中的字母大小写转换、首字母大写转换

    2024-01-18 13:56:03       54 阅读
  8. linux 内核ARM32启动

    2024-01-18 13:56:03       50 阅读
  9. idea个人常用快捷键汇总

    2024-01-18 13:56:03       61 阅读
  10. 去除GIT某个时间之前的提交日志

    2024-01-18 13:56:03       52 阅读
  11. ElasticSearch设置用户名密码访问

    2024-01-18 13:56:03       50 阅读
  12. vue2上传图片image-conversion压缩

    2024-01-18 13:56:03       53 阅读