成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

7-django——文件上傳_分頁_ajax_富文本_celery

lylwyy2016 / 1010人閱讀

摘要:上傳文件概述當(dāng)在處理文件上傳時,文件的數(shù)據(jù)被存儲在屬性中只有在請求的方法為且提交的表單帶有屬性的情況才會包含數(shù)據(jù)。如豆瓣,防止頁面卡死。

上傳文件 概述

當(dāng)Django在處理文件上傳時,文件的數(shù)據(jù)被存儲在request.FILES屬性中

FILES只有在請求的方法為POST且提交的form表單帶有enctype="multipart/form-data"屬性的情況才會包含數(shù)據(jù)。否則,F(xiàn)ILES將為一個空的類似字典的對象

FILES中的鍵為input的name屬性值

上傳界面



    
    文件上傳


    
{% csrf_token %}
文件存儲路徑

在static目錄下創(chuàng)建名為media的目錄

配置路徑:

settings

# 文件上傳的路徑
MEDIA_URL = "/media/"   # 訪問資源的地址如 http://127.0.0.1:5000/media/1.jpg
# 寫相對路徑也可以
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
request.FILES數(shù)據(jù)結(jié)構(gòu)
{
    "file": [
        , 
        
    ], 
    "pic": [
        
    ]
}
視圖實(shí)現(xiàn)
from django.conf import settings
def upfile(request):
    if request.method == "GET":
        return render(request, "upfile.html")
    else:
        # print(request.FILES)
        for name in request.FILES:
            files = request.FILES.getlist(name)
            # print(files)
            for file in files:
                #處理每個文件
                filePath = r"%s\%s"%(settings.MEDIA_ROOT,file.name)
                with open(filePath, "wb") as fp:
                    # 將文件數(shù)據(jù)切片寫入描述符
                    for part in file.chunks():
                        fp.write(part)
        return HttpResponse("上傳文件成功")
圖片生成縮略圖
# 生成縮略圖

from PIL import Image
im = Image.open("c.jpg")
print(im.format, im.size, im.mode)
# JPEG (840, 1024) RGB
im.thumbnail((100,200))
im.save("c1.jpg", "JPEG")
分頁 Paginator對象

Page對象

示例
from django.core.paginator import Paginator
def students(request, num):
    allStudents = Student.objects.all()
    #分頁 每頁6條數(shù)據(jù)
    paginator = Paginator(allStudents, 6)
    print(paginator.count, paginator.num_pages, paginator.page_range)
    pageStus = paginator.page(num)
    return render(request, "students.html", {"stus":pageStus})



    
    學(xué)生信息


學(xué)生信息

    {% for stu in stus %}
  • {{ stu.name }}--{{ stu.grade }}--{{ stu.age }}
  • {% endfor %}
{% if stus.has_previous %} 上一頁 {% endif %} {% for index in stus.paginator.page_range %} {% if index == stus.number %} {{ index }} {% else %} {{ index }} {% endif %} {% endfor %} {% if stus.has_next %} 下一頁 {% endif %}
Ajax 問題

使用視圖通過上下文向模板中傳遞數(shù)據(jù),需要先加載完成模板的靜態(tài)頁面,再執(zhí)行模板模型代碼,生成最后的HTML代碼,返回給瀏覽器,這個過程將頁面與數(shù)據(jù)集成到了一起,擴(kuò)展性差

解決

通過ajax的方式獲取數(shù)據(jù),再通過DOM操作將數(shù)據(jù)呈現(xiàn)到界面上

異步:如發(fā)郵件(注冊的時候提示郵件已經(jīng)發(fā)送成功,其實(shí)并沒有) 能提高用戶體驗(yàn)。 如豆瓣,防止頁面卡死。

前端代碼



    
    展示學(xué)生
    


    
    
def allStudents(request):
    if request.method == "GET":
        if not request.is_ajax():
            return render(request, "allStudents.html")
        else:
            stus = Student.objects.all()
            arr = []
            for stu in stus:
                arr.append({"name":stu.name, "age":stu.age})
            return JsonResponse({"data":arr})
富文本

安裝:pip install django-tinymce

在站點(diǎn)中使用 激活應(yīng)用
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "myApp",
    "tinymce",
]
配置
TINYMCE_DEFAULT_CONFIG={
    "theme":"advanced",
    "width":600,
    "height":400
}
模型
from tinymce.models import HTMLField
class Article(models.Model):
    title = models.CharField(max_length=20)
    content = HTMLField()
admin.py
admin.site.register(Article)
在自定義頁面中使用



    
    書寫博客
    
    



    
{% csrf_token %}

Celery 問題

用戶發(fā)起request請求,并等待response返回。在本次views中,可能需要執(zhí)行一段耗時的程序,那么用戶會等待很長時間,造成不好的用戶體驗(yàn)

網(wǎng)站每小時需要同步數(shù)據(jù)(天氣預(yù)報信息),但是http是需要觸發(fā)的,難道要一個小時請求一次嗎?

解決方案

使用celery:將耗時的程序放到celery中執(zhí)行 使用celery定時執(zhí)行

celery

任務(wù)task:就是一個python函數(shù)

隊(duì)列queue:將需要執(zhí)行的任務(wù)加入隊(duì)列中

工人worker:在一個新的進(jìn)程中負(fù)責(zé)執(zhí)行隊(duì)列中的任務(wù)

代理broker:負(fù)責(zé)調(diào)度,在布置環(huán)境中使用redis

安裝
pip  install  celery==3.1.25
pip  install  celery-with-redis==3.0
pip  install  django-celery==3.2.1
配置 激活應(yīng)用
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "myApp",
    "tinymce",
    "djcelery",
]
配置redis
#celery
import djcelery
djcelery.setup_loader()
#配置redis數(shù)據(jù)庫
#redis://:密碼@ip:端口/庫
BROKER_URL="redis://:[email protected]:6379/0"
#配置任務(wù)文件
CELERY_IMPORTS=("myApp.task")
創(chuàng)建任務(wù)文件,并分裝任務(wù)
# 在應(yīng)用目錄下創(chuàng)建名為task.py的文件
# -*- coding:utf-8 -*-
from celery import task
import time

@task
def longIO():
    print("開始耗時操作……")
    time.sleep(5)
    print("結(jié)束耗時操作……")
遷移

python manage.py migrate

生成celery所需要的表

添加celery.py文件

將已存在的celery.py添加到工程目錄下的與工程目錄同名的目錄下

celery.py

from __future__ import absolute_import

import os
from celery import Celery
from django.conf import settings

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "whthas_home.settings")

app = Celery("portal")

app.config_from_object("django.conf:settings")
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print("Request: {0!r}".format(self.request))
導(dǎo)入celery

在工程目錄下的與工程目錄同名的目錄中的__init__.py文件中添加from .celery import app as celery_app

在視圖使用任務(wù)
from myApp.task import longIO
def registe(request):
    longIO.delay()
    return HttpResponse("sunck is a good man")
啟動redis
redis-server.exe     redis.windows.conf
啟動worker
python  manage.py  celery  worker  --loglevel=info
啟動Django服務(wù)
python  manage.py  runserver

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42011.html

相關(guān)文章

  • 6-django——admin站點(diǎn)管理

    摘要:概述負(fù)責(zé)添加修改刪除內(nèi)容,開發(fā)這些重復(fù)的功能是一件沒有創(chuàng)造力的事情。然后進(jìn)入該目錄執(zhí)行安裝配置主路由模塊自動注冊需要版本控制的如果出現(xiàn)是由于數(shù)據(jù)庫中沒有的表的問題,可以刪除數(shù)據(jù)庫,執(zhí)行遷移。。文件上傳分頁富文本 概述 負(fù)責(zé)添加、修改、刪除內(nèi)容,開發(fā)這些重復(fù)的功能是一件沒有創(chuàng)造力的事情。因此Django會根據(jù)定義的模型自動生成管理模塊 配置Admin應(yīng)用 在settings.py文件中的...

    Leck1e 評論0 收藏0
  • django項(xiàng)目admin后臺整合tinymce文本編輯并自定義添加圖片本地上傳文本中的回顯

    摘要:選擇該頁面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時需要下載語言包放到對應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺功能而選擇該框架,但也因?yàn)槠渥詣由傻奶厥庑远谧龀鎏貏e的更改的時候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁顯示,定制性高,后來翻了目前較為知名的幾款富文本編輯框,覺得還是tiny...

    HackerShell 評論0 收藏0
  • django項(xiàng)目admin后臺整合tinymce文本編輯并自定義添加圖片本地上傳文本中的回顯

    摘要:選擇該頁面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時需要下載語言包放到對應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺功能而選擇該框架,但也因?yàn)槠渥詣由傻奶厥庑远谧龀鎏貏e的更改的時候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁顯示,定制性高,后來翻了目前較為知名的幾款富文本編輯框,覺得還是tiny...

    Honwhy 評論0 收藏0
  • django項(xiàng)目admin后臺整合tinymce文本編輯并自定義添加圖片本地上傳文本中的回顯

    摘要:選擇該頁面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時需要下載語言包放到對應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺功能而選擇該框架,但也因?yàn)槠渥詣由傻奶厥庑远谧龀鎏貏e的更改的時候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁顯示,定制性高,后來翻了目前較為知名的幾款富文本編輯框,覺得還是tiny...

    k00baa 評論0 收藏0
  • summernote(文本編輯器)將附件與圖片上傳到自己的服務(wù)器(vue項(xiàng)目)

    摘要:將創(chuàng)建好的對象,再插入到編輯器中注意這里不用方法因?yàn)樗麜~外的標(biāo)簽具體查看,另外當(dāng)選取本地文件的時候,此時的富文本編輯器會失去焦點(diǎn),插入新的節(jié)點(diǎn)的時候,總是從起始點(diǎn)開始插入,而非從當(dāng)前光標(biāo)的位置進(jìn)行插入。 1.上傳圖片至自己的服務(wù)器(這個官方都有例子,重點(diǎn)介紹附件上傳)圖片上傳官方網(wǎng)址 // onChange callback $(#summernote).summernote({ ...

    wqj97 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<