日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用web.py在BAE建立自已的电影网站

發(fā)布時(shí)間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用web.py在BAE建立自已的电影网站 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

最近在網(wǎng)上看了一篇文章使用web.py在BAE上建立電影網(wǎng)站,http://www.51bigfool.com/%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%94%A8bae%E5%92%8Cweb-py%E6%89%93%E9%80%A0%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1top100%E7%9A%84.html 我自已也在此基礎(chǔ)上做了一些改進(jìn),也在一點(diǎn)點(diǎn)的熟悉使用web.py這個(gè)框架,可以看一下我弄了一半的應(yīng)用 http://mypythontest.duapp.com/

準(zhǔn)備 BAE web.py

1. 在BAE上建立一個(gè)python的應(yīng)用(快速創(chuàng)建即可),選擇Iframe

之后進(jìn)入云引擎將環(huán)境類型設(shè)置為python

先簡(jiǎn)單看一下目錄結(jié)構(gòu)如下

│? index.py
│? model.py

├─static
│? └─images
│????????? lg_movie_a12_2.png

└─templates
??? │? add.html
??? │? base.html
??? │? index.html
??? │? play.html
??? │? show.html
??? │? top250style.css

新建一個(gè)Mysql,進(jìn)入phpmyadmin導(dǎo)入所需的表

?

CREATE?TABLE?DoubanTop250(id?INT?AUTO_INCREMENT?,moviename?TEXT,score?FLOAT,url?TEXT,PRIMARY?KEY?(?id?) )

我先按照原來(lái)的教程添加了相應(yīng)的代碼

model.py

#?_*_?coding:utf-8?_*_ import?web import?web.db from?bae.core?import?constdbname?=?"數(shù)據(jù)庫(kù)名字"db?=?web.database(dbn='mysql',host=const.MYSQL_HOST,port=int(const.MYSQL_PORT),user=const.MYSQL_USER,passwd=const.MYSQL_PASS,db=dbname )def?additem(name,?rating,?address):return?db.insert('DoubanTop250',?moviename=name,?score=rating,?url=address)def?get_items():return?db.select('DoubanTop250',?order='id')def?get_item(id):return?db.select('DoubanTop250',?where='id=$id',?vars=locals())[0]

index.py

#_*_?coding:utf-8?_*_ import?web import?model import?os import?reurls?=?("/",?"Index","/play/(\d+)",?"Play" )t_globals?=?{'datestr':?web.datestr }app_root?=?os.path.dirname(__file__) template_root?=?os.path.join(app_root,?'templates/') render?=?web.template.render(template_root,?base='base',?globals=t_globals)class?Index:def?GET(self):items?=?model.get_items() #???????return?render.test(items)return?render.index(items)class?Play:def?POST(self,?id):id?=?int(id)item?=?model.get_item(id)return?render.play(item)app?=?web.application(urls,?globals()).wsgifunc() from?bae.core.wsgi?import?WSGIApplication application?=?WSGIApplication(app)

base.html

$def?with?(page) <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html??xmlns="http://www.w3.org/1999/xhtml"><head><meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"?/><title>?楊彥星的自?shī)首詷?lè)</title><link?type="text/css"?rel="stylesheet"?href="/templates/top250style.css"?/></head><body><div?id="header"><a?target="_blank"?href="http://movie.douban.com/chart"?title="豆瓣電影排行旁"><img?src="/static/images/lg_movie_a12_2.png"?></a></div><div?id="main"><h1>?這是瞎寫(xiě)的我會(huì)亂說(shuō)嗎|<a?target="_blank"?href?=?"/addmovie/">添加電影</a></h1>$:page</div><div?id="footer"><div?id="copyright"><p>本站純屬自?shī)首詷?lè)與學(xué)習(xí)python之用,電影啥的全是網(wǎng)上收集</p><a?href?=?"/">返回首頁(yè)</a><p><em>Proudly?powered?by?Web.py</em></p></div></div></body> </html>

index.html

$def?with(items)<table><tr><th>排名</th><th>影片名</th><th>得分</th><th>百度影音播放</th></tr>$for?item?in?items:<tr><td?id="tdstyle">$item.id</td><td?id="tdstyle">$item.moviename</td><td?id="tdstyle">$item.score</td><td?id="tdstyle"><form?action="/play/$item.id"?method="post"><input?type="submit"?value="播放"?/></form></td></tr></table>

play.html

$def?with(item) <h2>$item.id?$item.moviename</h2> <blockquote><object?classid="clsid:02E2D748-67F8-48B4-8AB4-0A085374BB99"?width="600"?height="400"?id="BaiduPlayer"?name="BaiduPlayer"?onError=if(window.confirm('請(qǐng)您先安裝百度影音軟件,然后刷新本頁(yè)才可以正常播放.')){window.open('http://player.baidu.com')}else{self.location='http://player.baidu.com'}><PARAM?NAME='URL'?VALUE=$item.url><PARAM?NAME='Autoplay'?VALUE='1'></object><a?title="返回首頁(yè)"?href="http://kanimdb.duapp.com">?返回首頁(yè)?</a> </blockquote>

top250style.css

body{background-image:?url(tw.jpg);background-position:right;background-color:?#fff;margin-left:15%;margin-right:15%;border:?2px?dotted?gray;padding:?20px?20px?20px?20px;font-family:?sans-serif; }h1?{font-family:?sans-serif;font-weight:?bolder;;color:?green;border-bottom:?2px?solid?gray;text-align:?center; }table?{width:?500px;text-align:?center;margin-top:?30px;margin-left:?20%;margin-right:?20%;border:?thin?solid?black;border-collapse:?collapse; }th,?#tdstyle?{border:?thin?dotted?gray;padding:?5px;background-color:?silver; } th?{background-color:?#fcba7a; }#main?{padding-top:?20px;padding-bottom:?20px; }#bdplaer?{padding-left:?10px;padding-right:?10px; }#header?{text-align:?center; }#footer?{padding:?10px,?10px,?10px,?10px;text-align:?center; }#copyright?{padding:?10px,?10px,?10px,?10px;font-size:?small; }

修改app.conf

handlers:-?url?:?/static/images/(.*)script:?/static/images/$1-?url?:?/templates/(.*)script:?/templates/$1-?url?:?/(.*)script:?index.py-?expire?:?.jpg?modify?10?years-?expire?:?.swf?modify?10?years-?expire?:?.png?modify?10?years-?expire?:?.gif?modify?10?years-?expire?:?.JPG?modify?10?years-?expire?:?.ico?modify?10?years

好了,現(xiàn)在這個(gè)應(yīng)用基本上就可以看了,不過(guò)現(xiàn)在請(qǐng)忘了以上的代碼。因?yàn)槲覀円獮槠涮砑右恍┳砸训南胍臇|西

首先我們要添加“添加影片”功能

修改urls配置

urls?=?("/","Index","/play/(\d+)","Play","/add/","Add","/addmovie/","addmovie" )

這里的addmovie 其實(shí)只是想render到一個(gè)模板中

添加class addmovie實(shí)現(xiàn)

class?addmovie:def?GET(self):return?render.add()

添加add.html

<form?action="/add/"?method="post"> 電影名:<input?type="text"?name?=?"name"><br> 得分:<input?type="text"?name?=?"rating"><br> 播放地址:<input?type="text"?name?=?"address"><br> <input?type="submit"?value="add"> </form>

很簡(jiǎn)單的表單,我前端不會(huì),只會(huì)寫(xiě)簡(jiǎn)單的html

這里name值可以隨便寫(xiě),有意義或者你自已認(rèn)識(shí)即可,反正后面的python代碼會(huì)做處理

這里將movie的信息post到/add/中

轉(zhuǎn)為urls里已經(jīng)配置了

"/add/","Add",

下面來(lái)寫(xiě)class Add實(shí)現(xiàn)

class?Add:def?POST(self):movieinfo?=?web.data()#model.additem(movieinfo)#return?render.show(movieinfo)postlist?=?movieinfo.split('&')???movie?=?[]for?i?in?postlist:movie.append(i.split('=')[1])model.additem(urllib.unquote(movie[0]),movie[1],urllib.unquote(movie[2]))web.seeother("/")

這里的代碼寫(xiě)的太ugly了,但是可以滿足需要,如果有更好的實(shí)現(xiàn)可以和我說(shuō)下

先將post來(lái)的數(shù)據(jù)使用&分割,將會(huì)得到name=xxx,rating=xxx,address=xxx的列表

接著來(lái)獲取相應(yīng)的值,也就是再將列表中的各個(gè)項(xiàng)再用‘=’進(jìn)行分割,然后將值append到一個(gè)新的列表中

然后將新的列表中的各個(gè)值進(jìn)行unquote,要不你插入到數(shù)據(jù)庫(kù)中的將不是中文等,而是quote過(guò)的數(shù)據(jù)

插件結(jié)束后跳轉(zhuǎn)到首頁(yè) web.seeother(“/”)

好了,現(xiàn)在我們完成了添加電影的操作

2.完成后你現(xiàn)在就去找些電影和百度影音地址來(lái)添加看看,但是我發(fā)現(xiàn)一個(gè)新的問(wèn)題,百度影音在非IE瀏覽器上是不好用的,這還了得……

在網(wǎng)上找方法,有一個(gè)通過(guò) javacsript先判斷瀏覽器的appname來(lái)決定使用哪個(gè),http://pcbbs.baidu.com/thread-62871-1-1.html

這個(gè)是我試過(guò)了,可以實(shí)現(xiàn)在chrome與FF下調(diào)用百度影音,但是我要傳的$item.url不能傳入javascrip中,傳入后就是$item.url,在網(wǎng)上查找說(shuō)可以要寫(xiě)兩個(gè)$,我也試過(guò)了,但是還是不能播放,于是我決定放棄IE用戶,讓所有播放都走非IE的方法中,愛(ài)咋地咋地。


<embed?id="QvodPlayer2"?name="QvodPlayer2"?width="860"?height="460"?URL=$item.url?type='application/qvod-plugin'?Autoplay='1'?Showcontrol='1'?></embed>


百度這點(diǎn)做的就不如qvod,人家官方都出了在非IE瀏覽器上調(diào)用的方法,而百度還在使用IE,真是不思進(jìn)取,我也決定在網(wǎng)頁(yè)上調(diào)用qvod播放接口

那么新的問(wèn)題又來(lái)了,程序怎么知道你是要用qvod還是百度來(lái)播放?其實(shí)很簡(jiǎn)單,你在添加播放地址的時(shí)候,qvod的地址是以qvod開(kāi)始的,百度影音是以bdhd開(kāi)始的,只要判斷一下$item.url是以哪個(gè)開(kāi)頭的就可以了

但是網(wǎng)上更多的還是thunder,edk等協(xié)議的影視資源,這些無(wú)論是百度還是qvod都無(wú)法播放,于是我想到了現(xiàn)在很流行的云點(diǎn)播,迅雷的云點(diǎn)播可以播放,但是非白金會(huì)員只能播放一段時(shí)間,隨便找了幾個(gè)提供在線云點(diǎn)播的,有彈出式廣告的占大多數(shù),于是找了一個(gè)沒(méi)有廣告的,okdvd,其接口調(diào)用也挺簡(jiǎn)單的

<iframe scrolling="no" frameborder="0" name="win_vod" id="win_vod" border="0" style="width: 950px; height: 550px" src="http://www.okdvd.com/api.php#!url=后面加上播放地址"></iframe>

所以最終修改我的play.html為

$def?with(item) <h2>$item.id?$item.moviename</h2> <blockquote> <div?align?=?"center"> $if?item.url.startswith('qvod'):<object?classid="clsid:F3D0D36F-23F8-4682-A195-74C92B03D4AF"?width="860"?height="460"id="QvodPlayer"?name="QvodPlayer"?onerror="document.getElementById('QvodPlayer').style.display='none';document.getElementById('iframe_down').style.display='';document.getElementById('iframe_down').src='http://error2.qvod.com/error4.htm';"><param?name='Showcontrol'?value='2'><param?name='URL'?value=$item.url><param?name='Autoplay'?value='1'><embed?id="QvodPlayer2"?name="QvodPlayer2"?width="860"?height="460"?URL=$item.url?type='application/qvod-plugin'?Autoplay='1'?Showcontrol='1'?></embed></object>???? $elif?item.url.startswith('bdhd'):<object?id="BaiduPlayer"?name="BaiduPlayer"?type="application/player-activex"?width="860"?height="460"?progid="Xbdyy.PlayCtrl.1"?param_URL=$item.url?param_OnPlay="onPlay"?param_OnPause="onPause"?param_OnFirstBufferingStart="onFirstBufferingStart"?param_OnFirstBufferingEnd="onFirstBufferingEnd"?param_OnPlayBufferingStart="onPlayBufferingStart"?param_OnPlayBufferingEnd="onPlayBufferingEnd"?param_OnComplete="onComplete"?param_Autoplay="1"></object> $else:<iframe?scrolling="no"?frameborder="0"?name="win_vod"?id="win_vod"?border="0"?style="width:?860px;?height:?460px"?src="http://www.okdvd.com/okapi.php#!url=$item.url"></iframe> </div> </blockquote>

這里有一個(gè)問(wèn)題困擾了我很長(zhǎng)時(shí)間,原來(lái)這里的模板如果有python代碼的話也是要遵循其縮進(jìn)原則的,如$if 下面的<object>如果和$if同級(jí),那么也會(huì)報(bào)錯(cuò),BAE提供錯(cuò)誤日志,可以很快的查看到哪里出錯(cuò)了

3.首頁(yè)上播放按鈕現(xiàn)在還都是“播放”字樣,我想讓它顯示是百度還是qvod播放,其實(shí)方法和上面一樣,判斷$item.url的startswith()方法,另外我又有了新的需求,因?yàn)榫W(wǎng)上有些電影的資源實(shí)在不好找到百度或者qvod與thunder或者edk資源,但是優(yōu)酷或者土豆上有,那我可以讓其跳轉(zhuǎn)到相應(yīng)的網(wǎng)址上播放

所以最終的index.html修改成這樣

$def?with(items)<table><tr><th>排名</th><th>影片名</th><th>得分</th><th>播放</th></tr>$for?item?in?items:<tr><td?id="tdstyle">$item.id</td><td?id="tdstyle">$item.moviename</td><td?id="tdstyle">$item.score</td><td?id="tdstyle">$if?item.url.startswith("http"):??????????????????<form?action="$item.url"?method="get"?target="_blank"><input?type="submit"?value="新頁(yè)面播放"?/></form>$elif?item.url.startswith('bdhd'):<form?action="/play/$item.id"?method="post"><input?type="submit"?value="百度影音播放"?/></form>$elif?item.url.startswith('qvod'):<form?action="/play/$item.id"?method="post"><input?type="submit"?value="qvod播放"?/></form>$else:<form?action="/play/$item.id"?method="post"><input?type="submit"?value="云點(diǎn)播播放"?/></form></td></tr></table>

而最終的index.html修改成這樣

#-*-?coding:utf-8?-*- import?web import?model import?os import?re import?urlliburls?=?("/","Index","/play/(\d+)","Play","/add/","Add","/addmovie/","addmovie" )t_globals?=?{'datestr':?web.datestr }app_root?=?os.path.dirname(__file__) template_root?=?os.path.join(app_root,?'templates/') render?=?web.template.render(template_root,?base='base',?globals=t_globals)class?Index:def?GET(self):items?=?model.get_items() #???????return?render.test(items)return?render.index(items)class?Play:def?POST(self,?id):id?=?int(id)item?=?model.get_item(id)return?render.play(item)class?Add:def?POST(self):movieinfo?=?web.data()#model.additem(movieinfo)#return?render.show(movieinfo)postlist?=?movieinfo.split('&')???movie?=?[]for?i?in?postlist:movie.append(i.split('=')[1])model.additem(urllib.unquote(movie[0]),movie[1],urllib.unquote(movie[2]))web.seeother("/")class?addmovie:def?GET(self):return?render.add()app?=?web.application(urls,?globals()).wsgifunc() from?bae.core.wsgi?import?WSGIApplication application?=?WSGIApplication(app)

?

4.遺留問(wèn)題,現(xiàn)在沒(méi)有權(quán)限限制,誰(shuí)都可以添加,也沒(méi)有修改與刪除選項(xiàng),所以后面我將添加相應(yīng)的權(quán)限管理,另外總不能自已都去手工添加電影,考慮使用爬蟲(chóng)來(lái)自動(dòng)添加電影

5.獻(xiàn)給熱愛(ài)的電影的同胞們,向亞倫&middot;斯沃茨 致敬

? 向湯唯致敬

轉(zhuǎn)載于:https://my.oschina.net/yangyanxing/blog/173295

總結(jié)

以上是生活随笔為你收集整理的使用web.py在BAE建立自已的电影网站的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。