国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

7-django——文件上傳_分頁(yè)_ajax_富文本_celery

lylwyy2016 / 998人閱讀

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

上傳文件 概述

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

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

FILES中的鍵為input的name屬性值

上傳界面



    
    文件上傳


    
{% csrf_token %}
文件存儲(chǔ)路徑

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

配置路徑:

settings

# 文件上傳的路徑
MEDIA_URL = "/media/"   # 訪問(wèn)資源的地址如 http://127.0.0.1:5000/media/1.jpg
# 寫(xiě)相對(duì)路徑也可以
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:
                #處理每個(gè)文件
                filePath = r"%s\%s"%(settings.MEDIA_ROOT,file.name)
                with open(filePath, "wb") as fp:
                    # 將文件數(shù)據(jù)切片寫(xiě)入描述符
                    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")
分頁(yè) Paginator對(duì)象

Page對(duì)象

示例
from django.core.paginator import Paginator
def students(request, num):
    allStudents = Student.objects.all()
    #分頁(yè) 每頁(yè)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 %} 上一頁(yè) {% endif %} {% for index in stus.paginator.page_range %} {% if index == stus.number %} {{ index }} {% else %} {{ index }} {% endif %} {% endfor %} {% if stus.has_next %} 下一頁(yè) {% endif %}
Ajax 問(wèn)題

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

解決

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

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

前端代碼



    
    展示學(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)
在自定義頁(yè)面中使用



    
    書(shū)寫(xiě)博客
    
    



    
{% csrf_token %}

Celery 問(wèn)題

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

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

解決方案

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

celery

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

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

工人worker:在一個(gè)新的進(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ù)庫(kù)
#redis://:密碼@ip:端口/庫(kù)
BROKER_URL="redis://:sunck@127.0.0.1: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("開(kāi)始耗時(shí)操作……")
    time.sleep(5)
    print("結(jié)束耗時(shí)操作……")
遷移

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")
啟動(dòng)redis
redis-server.exe     redis.windows.conf
啟動(dòng)worker
python  manage.py  celery  worker  --loglevel=info
啟動(dòng)Django服務(wù)
python  manage.py  runserver

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42011.html

相關(guān)文章

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

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

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

    摘要:選擇該頁(yè)面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時(shí)需要下載語(yǔ)言包放到對(duì)應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺(tái)功能而選擇該框架,但也因?yàn)槠渥詣?dòng)生成的特殊性而在做出特別的更改的時(shí)候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺(tái)要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁(yè)顯示,定制性高,后來(lái)翻了目前較為知名的幾款富文本編輯框,覺(jué)得還是tiny...

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

    摘要:選擇該頁(yè)面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時(shí)需要下載語(yǔ)言包放到對(duì)應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺(tái)功能而選擇該框架,但也因?yàn)槠渥詣?dòng)生成的特殊性而在做出特別的更改的時(shí)候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺(tái)要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁(yè)顯示,定制性高,后來(lái)翻了目前較為知名的幾款富文本編輯框,覺(jué)得還是tiny...

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

    摘要:選擇該頁(yè)面綁定的標(biāo)簽指定圖片上傳處理目錄注其中為了顯示為中文,標(biāo)明了中文,同時(shí)需要下載語(yǔ)言包放到對(duì)應(yīng)的文件夾下。 前言 我們常因?yàn)閐jango的自帶admin后臺(tái)功能而選擇該框架,但也因?yàn)槠渥詣?dòng)生成的特殊性而在做出特別的更改的時(shí)候束手束腳,鑒于項(xiàng)目已經(jīng)采用了django,而后臺(tái)要求能夠直接上傳富文本內(nèi)容直接用于網(wǎng)頁(yè)顯示,定制性高,后來(lái)翻了目前較為知名的幾款富文本編輯框,覺(jué)得還是tiny...

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

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

    wqj97 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<