ZERO 前言最近看到一個(gè)系列表情包火了起來(lái),無(wú)聊之下想起入門(mén)Django時(shí)沒(méi)什么好玩項(xiàng)目的種種不利,就寫(xiě)了這么一篇菜菜的文章,也算是一個(gè)簡(jiǎn)單的入門(mén)教程吧ONE 什么是DjangoDjango 項(xiàng)目" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > Django+PIL 做一個(gè)表情包生成網(wǎng)站

Django+PIL 做一個(gè)表情包生成網(wǎng)站

時(shí)間:2023-07-03 04:00:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-07-03 04:00:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

Django+PIL 做一個(gè)表情包生成網(wǎng)站:




ZERO 前言

最近看到一個(gè)系列表情包火了起來(lái),無(wú)聊之下想起入門(mén)Django時(shí)沒(méi)什么好玩項(xiàng)目的種種不利,就寫(xiě)了這么一篇菜菜的文章,也算是一個(gè)簡(jiǎn)單的入門(mén)教程吧

ONE 什么是Django

Django 項(xiàng)目是一個(gè)python定制框架,它源自一個(gè)在線新聞 Web 站點(diǎn),于 2005 年以開(kāi)源的形式被釋放出來(lái)。Django 框架的核心組件有:
用于創(chuàng)建模型的對(duì)象關(guān)系映射
為最終用戶設(shè)計(jì)的完美管理界面
一流的 URL 設(shè)計(jì)
設(shè)計(jì)者友好的模板語(yǔ)言
緩存系統(tǒng)。
總之Django是一款非常值得學(xué)習(xí)的web框架,關(guān)于框架的內(nèi)容不再贅述,下面直接進(jìn)入正題

Django官網(wǎng): https://www.djangoproject.com/
Django項(xiàng)目主頁(yè): https://github.com/django

TWO 創(chuàng)建項(xiàng)目

如果你還沒(méi)有安裝Django, 那么可以通過(guò)pip工具十分方便地進(jìn)行安裝:

pip install djangoBash短暫的等待后,運(yùn)行以下命令創(chuàng)建項(xiàng)目:  

django-admin startproject who_i_amBash當(dāng)前目錄下會(huì)產(chǎn)生一個(gè)名為who_i_am的文件夾,結(jié)構(gòu)如下:  

who_i_am/├── manage.py└── who_i_am ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py1 directory, 5 files進(jìn)入文件夾,運(yùn)行命令創(chuàng)建app:

python manage.py startapp index修改who_i_am/settings.py ,在INSTALLED_APPS中加入剛剛建立的應(yīng)用index:

……INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'index',]……使用命令 python manage.py runserver 0.0.0.0:8080 運(yùn)行開(kāi)發(fā)服務(wù)器,打開(kāi)瀏覽器訪問(wèn)http://localhost:8080/出現(xiàn)以下界面:  







Django應(yīng)用創(chuàng)建成功

THREE 真正的部分

1)配置路由  修改who_i_am/urls.py,綁定URL與視圖函數(shù):

……from index import views as vurlpatterns = [ url(r'^admin/', admin.site.urls), #Django自帶后臺(tái) url(r'^$', v.index), #首頁(yè) url(r'^makeit$', v.makeit), #生成表情包的接口 url(r'^about$', v.about), #關(guān)于頁(yè)面]……2)創(chuàng)建視圖函數(shù)

def index(request): if request.method == "GET": return render(request,'index.html',{}) #直接使用render渲染返回即可PythonCopy

這是最重要的一部分,實(shí)現(xiàn)了本網(wǎng)站的主要功能
先用PIL庫(kù)實(shí)現(xiàn)對(duì)圖片的修改:  

base = Image.open("base.png") #打開(kāi)源圖片font = ImageFont.truetype('font.ttf', 40) #打開(kāi)字體并設(shè)置字號(hào)d = ImageDraw.Draw(base) # 實(shí)現(xiàn)對(duì)圖片的繪圖d.text((100-len(text_one)*10, 30), text_one, font=font, fill=(0,0,0)) #向圖片繪制文字,第一個(gè)參數(shù)是起始坐標(biāo), 第二個(gè)是字符串,font為字體,fill為文字顏色實(shí)現(xiàn)繪圖以后,我們就可以使用PIL動(dòng)態(tài)生成我們的表情包了 創(chuàng)建視圖函數(shù)makeit,使用request.GET.get()URL里的獲取參數(shù):

def makeit(request): if request.method == "GET": text_one = request.GET.get('whoiam',u"我們是誰(shuí)!") ...使用剛剛的代碼根據(jù)參數(shù)生成圖片后將圖片存入內(nèi)存:

...buf = BytesIO()base.save(buf,format="png") #將圖片存入內(nèi)存image_stream = buf.getvalue() #獲取文件數(shù)據(jù)return HttpResponse(base64.b64encode(image_stream)) #處理數(shù)據(jù)為base64編碼并返回...$(document).ready(function() { $('#makeit').click(function() { var one = $("#whoiam").val(); var two = $("#name").val(); var three = $("#whatwewant").val(); var four = $("#idontknow").val(); var five = $("#when").val(); var six = $("#now").val(); $.get("/makeit", { 'whoiam': one, 'name': two, 'whatwewant': three, 'idontknow': four, 'when': five, 'now': six, }, function(rec) { var img = "data:image/png;base64," + rec; $("#result").attr("src", img) }) })})

FOUR 部署

Django網(wǎng)站的部署對(duì)于新手來(lái)說(shuō)是最大的一個(gè)坑 關(guān)于部署,我認(rèn)為最詳細(xì)的教程應(yīng)該是自強(qiáng)學(xué)堂的這篇Django 部署(Nginx) - Django 教程 - 自強(qiáng)學(xué)堂 這里省去安裝nginx和uwsgi,直接聊聊配置文件. 我的Nginx的.conf文件如下:

server { listen 80; server_name 你的域名; large_client_header_buffers 4 16k; client_max_body_size 300m; client_body_buffer_size 128k; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; charset utf-8; keepalive_timeout 70; access_log 你的項(xiàng)目地址/access.log ; error_log 你的項(xiàng)目地址/error.log; location /static { alias 你的項(xiàng)目地址/static; } location / { uwsgi_pass 127.0.0.1:8080;#此處為uwsgi.ini(下面講)中填的內(nèi)容 include /etc/nginx/uwsgi_params; }}在項(xiàng)目目錄下建立uwsgi.ini文件:

[uwsgi]# Django-related settingssocket = :8080 #此處的端口應(yīng)于.conf中的一致# the base directory (full path)chdir = 項(xiàng)目地址# Django uwsgi filemodule = who_i_am.wsgi# process-related settings# mastermaster = true# maximum number of worker processesprocesses = 4# ... with appropriate permissions - may be needed# chmod-socket = 664# clear environment on exitvacuum = truetouch-reload = 項(xiàng)目地址/reload #此處的reload文件,可以用于命令touch reload 快速重啟應(yīng)用die-on-term = true #如果沒(méi)有此配置,在重啟項(xiàng)目后會(huì)大量占用CPU資源……(此坑 坑我不淺)修改/etc/supervisord.conf配置supervisor: 在文件最后添加:

[program:who_i_am]command=/path/to/uwsgi --ini 項(xiàng)目目錄/uwsgi.ini #此處為剛剛建立的uwsgi.ini地址directory=項(xiàng)目目錄startsecs=0Bash最后重啟Nginx和supervisor:

service restart nginxsupervisorctl -c /etc/supervisord.conf restart who_i_amBash在域名服務(wù)商處建立A類型解析, 指向你的服務(wù)器ip地址,在瀏覽器輸入你的域名:







當(dāng)當(dāng)當(dāng)當(dāng)~ 完成啦,就是最上面那張圖的樣子

網(wǎng)站暫時(shí)放在這里 Who_I_am!
最后放上幾個(gè)表情包~













本文章同步發(fā)表在我的博客:Django+PIL 做一個(gè)表情包網(wǎng)站, 歡迎來(lái)逛逛~




張同學(xué),一個(gè)胡思亂想的中二病男子高中生,可否值得各位看官點(diǎn)一下關(guān)注呢?






關(guān)鍵詞:表情

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉