基于Django快速开发社会化程序代码共享系统(三)——相关功能页面和好友

基于Django快速开发社会化程序代码共享系统(三)——相关功能页面和好友


2024年4月14日发(作者:)

基于Djang (三) 

刘班 

摘 要:以Django1.2.5为基础开发了一个典型的社会化程序代码共享系统。详细讲解了该系统中 

相关功能页面和好友管理功能的实现。 

关键词:Python语言;Django框架;社会化;程序代码共享系统 

上期详细讲解了本系统中程序代码相关操作的实现过程. 

下面讲解本系统中包含的用户页面、程序代码页面以及好友管 

理功能(发送添加好友请求、添加好友请求列表页面、接受添 

加好友请求、删除添加好友请求、用户好友列表页面、删除用 

户好友)的实现过程。 

except Friendship.DOesN0tE×ist: 

is friend=False 

… 如果要访问的是当前登录用户的个人页面。”“” 

if request.user==user: 

is friend=True 

snippets=user.snippet

set.order

by( 一updated_date ) 

_

_

1 用户页面 

用户页面中按更新时间先后顺序以分页列表的形式显示了 

用户个人发布的所有程序代码,如图1所示。用户可以通过单 

击导航条或者程序代码列表中的用户名链接进入到自己或他人 

的个人页面中。 

page—title= 您发布的程序代码 

showrss=False 

_

”如果要访问的是其他用户的个人页面。… 

else: 

snippets=user.snippet

set.order

by( -updated_date ) 

_

page_title=u %s发布的程序代码 %username 

show

rss=True 

_

Django社会化程序代码共享系统 

您发布的程序代码 

return list

detail.object_list( 

_

request, 

queryset=snippets, 

paginate by=ITEMS 

PERPAG[-, 

———

耨讴 。 警 高 

啦她 

毒|蛰| 蕞南畸 毫。j 

201l-il-13 

template

name= user

page.htrnl , 

_

螋g芏攘羲艘隧 

l8卓越 3唾侍粹裁爨糯 

2012-03-03 

template

object_name= snippet :, 

誊蠹匏捌磐融士矬 

熙B ! 。n 握臻空亵隧

瓤波睑 

敬! 自隧勰 塑童戮滋秘

随也驰 

驻! 

敬 

extra

context={ 

l8币磅 鹞÷}糖鼹甍舔 

2012-05-21 

username :username, 

l8小嬲 嚣静静裁受耱 

2012-02-26 

friend 

is friend :is .

l8 m磷 静镑裁甍帮 

page—title :pagetitle, 

_

2012-06-22 

show 

user Fal

: 

se 

_

18小踱 赫静辩懿凳鞲 

Show rss show rss 

图1用户页面 

} 

) 

用户页面的显示由在views.PY文件中定义的视图函数 

user page负责实现.该视图函数的定义如下所示: 

user

_

视图函数user page在执行:过程中要通过模板文件 

定义视图函数user_page,其参数username用于接收u rl请 

求地址中包含的用户名信息。 ” 

def user

page(request,username): 

_

page.html来生成用户页面的HTML代码,该模板文件的 

内容如下所示: 

<!一一此文件要以utf一8编码保存一> 

{%extends base.htmr%) 

user=get_object_or_404(User.username=username) 

iS friend=True 

try: 

{%block title%){{page_title}}{{block.super}}{%endblock%) 

{%block head%}{{block.super}}{%endblock%) 

{%block content_title%) 

Friendship.objects.get( 

frOmfriend

_

username=request.user.username, 

{{page_title}) 

{%_f show_rss%) 

<a href="/feeds/user/{{username}}/rss.xml“> 

to

friend=user 

_

) 

5l l

^ ’ … … …… …… … h … 

实用第一/智慧密集 

 .… .. … … .… … … 

<img src="/site media/images/feed—icon.png”alt=”订阅 

RSS border=O></img> 

</a> 

{%endif%) 

{%endblock%) 

{%block content%} 

{%If not is_friend%) 

<a href=“{%urI friend—request%)?username= 

({username}}“>请求加为好友<,a> 

{%else%) 

{%ifnotequal user.username username%) 

<a href= {%url delete friend%)?fn={{username}} 

onclick=“return delFriendConfirmO”>将该用户从您的好友列表 

中删除</a> 

{%endifnotequal%} 

{%endif%} 

{%if snippet

_

list%) 

{%include“snippet_list.htmI”%) 

{%include“paginator.htmI %) 

{%else%) 

<p>{%ifnotequal user.username usemame%)该用户{% 

else%)您{%endifnotequaI%)目前还没有发布程序代码l</D> 

{%endif%) 

{%endblock%) 

为了能将用户名链接与视图函数user_page关联起来,还 

需要在urls.PY文件中添加一个视图函数user_page的命名url 

访问人口.如下所示: 

url(r'^users/(?p<username>kw 4-)/¥ ,user_page.name= 

user

_

page 

这样.用户就可以通过ud地址http://localhost:8OOO/users/< 

用户名>/来访问<用户名>指定用户的个人页面了。 

2 程序代码 

程序代码页面中包含了很重要的程序代码显示功能.如图 

2所示。 

1)jango社会化程序代码共享系统 

jAva里面一些时阊的计掉 扭黄扭眭 键麓趣融曲 艘触黝 

嚣 州描 筮靠畸 。 州 更囊埘 恫L 鹤 酏: 悯噩希韭麒:丽… 

m 

∞ -” 

1 - 

p …… t ‘s … 8 ! w sttln d4 i僻 t 

邸d 挑d jt 0 

m l t …;t脚l '。 0 L 础‘ 

r d — 

t 

幽 i z m 髓f 

… n t m—n { 'f 

j lTI { 船辩# r瓣磷《 " 

r ,n £{} 

图2程序代码页面 

0 20 13.疆01西与IIE 

程序代码不同于一般的文本信息,其显示需要使用语法高 

亮的特殊表现形式。程序代码语法高亮显示功能既可以在服务 

器端实现也可以在客户端实现,但在服务器端对程序代码进行 

语法高亮处理会明显增加服务器的负担。因此,本系统借助 

JQuery的一个语法高亮插件Snippet在客户端浏览器中对程序 

代码的语法高亮显示直接进行处理。 这样的设计思想指导 

下,实现程序代码页面显示功能的视图函数snippet—page变得 

非常简单,该视图函数定义如下所示: 

…”‘定义视图函数snippet_page,其参数snippet_id用于接收u rJ 

请求地址中包含的将要显示程序代码的id信息。 

def snippet

_

page(request,snippet_id): 

snippet=get

_

object_or_404(Snippe [,pk=snippet_id) 

try: 

Bookmark.objects.get(snippet=sn ppet.user_usemame= 

request.user.username) 

bookmarked=True 

except Bookmark.DoesNotExist: 

bookmarked=False 

“调用函数object_detail显示变量snippet中保存的Snippet 

数据模型对象的详细内容。 

return list

_

detail.object_detail( 

request, 

参数queryset用于指定将要显示的Snippet数据模型对 

象所在的Snippet数据模型对象查询集。 “ 

queryset=Snippet.objects.all(), 

“ 参数object_id用于指定将要显示的Snippet数据模型对 

象的主键值。 ” 

object_id=snippet_id, 

template

name= snippet

_

page.html , 

template

_

object_name= snippet 

extra context={ 

bookmarked :bookmarked 

) 

J 

视图函数snippet

page利用模板文件snippet

page.html生 

成程序代码页面的HTML代码,该模板文件的内容如下所示: 

<!一一此文件要以utf一8编码保存一一> 

{%extends”base.htmI_l%) 

{%load comments%) 

{%block title%}{{snippet.title}}{{block.super}}{%endblock%) 

{%block externa1%) 

<!一一链接使用JOuery插件Snippet所必需的jS脚本文件 

jquery.snippet.min.js--> 

<script type=“text/javascript src=7site—media/js/jquery. 

snippet.min.js”></script> 

<!一一链接使用JQuery插件Snippet所必需的CSS层叠样式 

表文件jquery.snippet.min.CSS--> 

<link tel=“stylesheet“type=“text/cSS。。href=“/site

_

media/css/ 

jquery.snippet.min.CSS”> 

<script type=。。text/javascript”> 

¥(document).ready( 

function() 

{ 

¥( select.style“).change( 

function() 

{ 

//按照程序代码所使用的程序设计语言对程序代 

马进行语法高亮处理 

¥(”pre.code“).snippet(“{{snippet.1anguage.slug}}”, 

{style:¥(this).val(),clipboard:"/site—media/swf/ 

ZeroClipboard.swf“,showNum:true}); 

)): 

¥(”select.style”).selectedlndex=0: 

¥( select.style”).trigger(“change“): 

)) 

<Iscript> 

{%endblock%) 

{%block head%}{{block.super}}{%endblock%l 

{%block content_menu%) 

<div class= menu > 

<!一一如果当前正在查看程序代码的用户就是该程序代码 

的发布者一一> 

{%ifequal user snippet.user%) 

<a href=“{%url snippet

_

edit page snippet.id%)”>【编辑l 

</a>  

<a href=“{%url delete—snippet%}?snippet_id={{snippet. 

id))“c}ass=“del—snippet。onclick=“return deISnippetConfirmO”> 

【删除】</a> 

<{一一如果当前正在查看程序代码的用户不是该程序代码 

的发布者一一> 

{%else%) 

<img src= '/site_media/images/inc.JPg“all=”对我有用“></ 

img><a href: {%url vote%)?snippet

_

id={{snippet.id}) 

&vote

_

type=inc”>对我有用{{{snippet.votes—useful}})</a> 

&nbsp:&nbsp:&nbsp:<img src="/site—media/images/dec.iPg“ 

alt=“对我没用“></img><a href= {%url vote%}?snippet_id= 

{{snippet.id}}&vote_type=dec“>对我没用{{{snippet. 

votes

useless}})</a>&nbsp:&nbsp: 

<!一一如果当前登录用户已经收藏了保存在模板变量 

snippet中的Snippet数据模型对象---> 

{%if bookmarked%) 

<a href: {%url delete—bookmark%)?snippet_id: 

{{snippet.id}) class=”del—bookmark” onclick=”return 

delBookmarkConfirmO“>I取消收藏】</a> 

<!—-如果当前登录用户没有收藏保存在模板变量 

snippet中的Snippet数据模型对象一一> 

{%else%) 

<a href:”{%url add—bookmark%}?snippet_id: 

{{snippet.id))”>【收藏l</a> 

{%endif%) 

{%endifequal%) 

</div> 

{%endblock%) 

{%block content_title%}{{snippet.title}}{%endblock%) 

{%block content%) 

<D> 

<b>发布者:</b><a href=“{{snippet.user. 

get_absolute

_

url}}“>{{snippet.user.username})</a>  

&nbsp:&nbsp:&nbsp:<b>发布时间:</b>{{snippet.pub_date l 

date:“Y—m—d“)) &nbsp:&nbsp &nbsp:<b>更新时间:</ 

b>{{snippet.updated—dateltimesince}}前&nbsp:&nbsp:&nbsp: 

 <b>语言:</b><a href=“(%url main—page%)?lang= 

{{snippet.1anguage.slug}}”>{{snippet.1anguage.name}}</a> 

     

<b>代码显示主题:</b> 

<!一一Snippet插件支持很多不同类型的程序代码高亮主 

题,本系统仅仅列出了其中的一部分主题供用户选择,更多具体 

的主题信息可以在Snippet插件的项目网站http://www. 

steamdev.COm,snippet/q=查看。一一> 

<select class=“style。’> 

<option value=”acid seIect《≥d>acjd</option> 

<option value= bipolar“>bipolar</option> 

<option value=。。desert >desert</option> 

<option va}ue=。dull“>dull・z/option> 

<option value=“easter“>easter</option> 

<option value=“emacs“>emacs</c。ption> 

<option value=“golden“>golden</option> 

<option value= greenlcd“>greenlcd</c・ption> 

</select><br> 

<b>标签:</b> 

{%if snippet.tag set.all%1 

{%for tag in snippet.tag_set.all%) 

<a href=”{{tag.get absolute—url}}”>“tag.name}}</a> 

{%endfor%) 

{%else%) 

无 

{%endif%) 

‘|Q> 

<pre class=。。code“>{{snippet.COde}}</pre> 

<b>描述:</b> 

{%if snippet.description%) 

{{snippet.descriDtio 

{%else%} 

无 

{%endif%) 

<h2>用户评论</h2> 

{%get_comment

_

list for codesharing.snippet snippet.id as 

comment

_

list%} 

{%lf comment—list%) 

{%for comment in comment—list%) 

<div class=”comment“> 

<b><a href=“{{comment.user.get_absolute_url}}“> 

{{comment.user.USername}}</a>一</b>    

<i>发表于{{comment.submit_dateldate: Y—m—d H:i:s”}) 

0 

…………………… …… … ……… …………… 

实用第一 智慧密集 

… … …… … … … …… … 

   {{comment.ip_address}}</i> 

{{comment.commentIescapeIurlizetrunc:4OIlinebreaks)) 

</div> 

(%endfor%} 

{%else%} 

<p>目前还没有用户对该程序代码进行过评论!</p> 

{%endif%) 

<!一一生成评论输入表单—.> 

(%render—comment fOrm for codesharing.snippet sn;ppet. 

id%) 

{%endblock%) 

标签render

comment

form需要借助本系统comments文件 

_

夹中的模板文件form.btml来生成评论输入表单的HTML代码, 

该模板文件的内容如下所示: 

<i一一此文件要以utf一8编码保存一一> 

{%lcad comments%) 

{%if user.is_authenticated%) 

<form name:”comment form“class=“comment"action= 

{%comment_form_target%)l IImethod= post“> 

(%CSrf_token%) 

{%f0r field in form%) 

{%-f field.is_hidden%) 

{{field)) 

{%endif%) 

{%endfor%) 

<label for=“id

comment”>发表评论:</label> 

<textarea name=“comment“jd=“id comment rOWS=”1O“ 

COIS= 60“></textarea> 

<input type= submit name=“post”value: 提交评论n/> 

</form> 

{%else%) 

<p>请<a href="/accounts/Iogin/?next={{request. 

geUull—path}}“>登录<,a>后,再发表评论。</p> 

{%endif%} 

视图函数snippet_page的命名ur1访问入口在urls.PY文件 

中添加,如下所示: 

url(r'^snippet/(?P<snippet

_

id>\d+)/¥ .snippet_page name= 

snippet page,) J

这样.用户就可以通过urJ地址http://localhost:8000/ 

snippet/<程序代码id>/来进入<程序代码id>指定程序代码的页 

面了。 

3好友管理相关功能 

3.1 发送添加好友请求 

好友管理功能是社会化Web应用系统中包含的一个必不 

可少的重要功能,本系统所包含的好友管理功能主要由发送添 

加好友请求、浏览添加好友请求列表、接受添加好友请求、删 

除添加好友请求、浏览用户好友列表以及删除用户好友这6个 

子功能组成。 

鑫 与 

如果用户A想添加另一个用户B为好友,那么用户A必 

须先进人用户B的个人页面,单击该页面中的“请求加为好 

友”链接,向用户B发送添加好友请求。 现这一功能的视图 

函数是firend_request.其定义如下所示: 

@Iogin required 

… 定义视图函数friend—request ̄” 

def friend

_

request(request): 

如果以 get方法请求的数据中包含参数username(该参数 

的值用于指定接收添加好友请求的用户名信息)。 

lf request.GET.has

key( username 

username=request.GET[ username l 

rec ̄#ient get

_

object_or_404(User,US( ̄rname=username) 

“如果接收添加好友请求的用户就是发送该请求的用户 

(即当前登录用户)。… 

if recipient==request.user: 

msg= 不能向自己发送添加好友请求! 

… 如果接收添加好友请求的用户已经存:在于发送该请求用 

户的好友列表中了。 

elif rec ̄pient in 【friendshi p.to_friend for friendship in 

request.user.friend

_

set.aI}()】: 

msg:U 用户%s已经是您的好友了,无需向其发送添加 

好友请求f %recipient.username 

“如果接收添加好友请求的用户已经;寺:在于发送该请求用 

户以前发送过的添加好友请求的接收请求 千I户列表中了。 “ 

elif recipient in【fr.recipient for fr in request.user.sent_frs. 

all()1: 

msg=U 您已经向用户%s发送过添0【]好友请求,无需重 

复发送! %recipient.username 

else: 

ne、^,_fr:FriendRequest.objects.create(sender:request. 

user,reciplent=recjpient) 

msg=U 您的添加好友请求已经发送给用户%s了! % 

recipient.username 

request.user.message_set.create(message=msg) 

return HttpResponseRedirect(recipient.get_absolute_ur l

f)) 

else: 

rIaise Http404( 参数错误l ) 

为了能正常触发视图函数friend_request的执行,还需要 

在urls.PY文件中添加一个该视图函数的命名ud访问人口,如 

下所示: 

url{r,^fr/¥ ,friend_request,name='friend—request ), 

这样.用户就可以通过ud地址http://localhost:8OOO/fr/? 

username=<用户名>向<用户名>指定的用 ,发送添加好友请求 

了。 

3.2添加好友请求列表页面 

用户登录本系统之后,如果有其他用尸向该用户发送过添 

加好友请求,则在导航条中就会出现相应的提示信息链接,用 

户可以通过单击该链接进入添加好友请求列表页面.在该页面 

中显示了添加好友请求的详细信息和处理请求的链接,如图3 

所示。 

Django社会化程序代码共享系统 

其他用户发送给您的添加好友请求 

霸户 s茳20l2呻7 棚l0:3l请掌祷悬抽蠢好丧{ 

毡遵 ±£ 莲换 l建裁瞪 i 遣壅 

用Pxml ̄2012-07—04 l0:3l请求将惩地为妤寂l 

照妊 薤蹙莛瘦盘虹蠹裳黪壤 舞窭 

用产丘 刚 2ol2 7.o4 10:2稍5术祷怒翔为好友 

赴蓝煎墓趣 嚏童壁酸a 煎塞 

图3添加好友请求列表页面 

实现添加好友请求列表页面显示的视图函数是fr_lisLpage, 

其定义如下所示: 

@Iogin

required 

”定义视图函数if_list_page。 ” 

def if

_

list

_

page(request): 

return Iist_detail.object_list( 

request, 

queryset=request.user.received

_

frs.all(), 

paginate

by=ITEMS

PER

PAGE, 

template

name="fi

_

list

_

page.htm r. 

template

_

object name= fr 

) 

视图函数fr

_

list

page在执行过程中要使用模板文件 

fr

_

list

_

page.html生成添加好友请求列表页面的html代码,该模 

板文件的内容如下所示: 

<f一一此文件要以utf一8编码保存一一> 

{%extends”base.htmI“%) 

f%block title%)其他用户发送给您的添加好友请求{{block. 

super}}{%endblock%} 

{%block head%)“block.super}}{%endblock%) 

{%block content_title%}其他用户发送给您的添加好友请求 

{%endblock%) 

f%block content%) 

{%iffr__list%) 

<协ble> 

{%for fr in fLIist%) 

<tr> 

<td class: friendrequest'。>用户<b><i>{{fr. 

sender.Username}}</i></b>在{{fr,sent_dateldate: Y—m—d H: 

.H))请求将您加为好友!</td> 

<td> &nbsp:<a href=”(%url accept_ff%)? 

fn={{fr.sender.username}} >允许,并将其加为好友</a><,td> 

<td>&nbsp:&nbsp:<a href= {%url delete_fr%)? 

fr

_

id=({fr..d】r>删除该请求</a></td> 

</tr> 

{%endfor%} 

</table> 

{%include paginator.htmI“%) 

{%else%) 

<p>目前还没有用户向您发送过添加好友请求}</p> 

{%endif%} 

{%endblock%) 

视图函数fr_list_page的命名url访问人口在urls.PY文件中 

添加.如下所示: 

url(r"^frs/¥ ,fr_list~page,name= fr.一list_page,)J 

3.3接受添加好友请求 

在添加好友请求列表页面中列出的每一个添加好友请求的 

后面都有一个“允许,并将其加为好友”的接受请求链接,用 

户可以通过单击该链接与发送相应请求的用户互相加为好友。 

实现此功能的视图函数是accept_fi‘,其定义如下所示: 

@log n required 

”定义视图函数accept_fr。 

def accept

_

fr(request): 

” 如果以get方法请求的数据中包含参数fn(该参数的值用 

于指定发送了添加好友请求的用户名信息)。 

if request.GET.has

key( fn 

fn=request.GET[ fn l 

friend=get

_

object_or_404(User,username=fn) 

…“。如果要添加为当前登录用户好友的用户f由其发出添加 

好友请求)就是当前登录用户(由其接受添加好友请求)。 “ 

If friend==request.user: 

msg= 不能将自己添加为好友! 

”如果要添加为当前登录用户好友的用户并不存在于向当 

前登录用户发送过添加好友请求的发送者列表中。 ” 

elif friend not in 【fr.sender for fr in request.user. 

received frs.aff(J1: 

msg=U 用户%s未向您发送过添加好友请求,或者他已 

经成为了您的好友I %friend.username 

如果要添加为当前登录用户好友的用户既存在于被当前 

登录用户添加为好友的用户列表中,又存在于将当前登录用户 

添加为好友的用户列表中。 “ 

elif(friend in Ifriendship.to_friend for friendship in request. 

user.friend,set.all{)】)and(friend in【friendship.fromjriend for 

friendship in request.user.to_friend

_

set.aII()】): 

msg:U 您和用户%S之间已经建立了好友关系,无需 

重复建立! %friend.username 

else: 

friendship,dummy=Friendship.objects.get_or create( 

frOm 

friend=friend .

to

_

friend=request.user 

) 

friendshiP,dummy=Friendship.objects.get_or create《 

fromjriend=request.user, 

tO,friend=friend 

) 

fr=get_object_or_404(FriendRequest,sender=friend, 

recipient=request.user) 

fr.delete() 

msg:U 您和用户%s之间已经成功建立了好友关系! % 

friend.username 

皴照螭 9 

…………… ……………… ……… …d … …… … 

实用第一 智慧密集 

… … … … .… 

request.user.message_set.create(message=msg) 

return HttpResponseRedirect(fnend.get_absolute—urlO) 

else: 

raise Http404[ 参数错误1 ) 

为了能正常触发视图函数accept_fr的执行,还需要在urls. 

py文件中添加一个该视图函数的命名ud访问人口,如下所 

示: 

url(r fr/accept/¥ ,acceptjr.name= accept_fr,)J 

这样.用户就可以通过ud地址http://localhost:8OOO/fr/ 

accepd?fn=<用户名>来接受<用户名>指定的用户发送过来的添 

加好友请求,与该用户互相加为好友了。 

3.4删除添加好友请求 

在添加好友请求列表页面中,用户可以通过单击“删除该 

请求”链接将其对应的添加好友请求删除。实现此功能的视图 

函数是delete_fr,其定义如下所示: 

@Iogin required 

” 定义视图函数delete_fr。 ” 

def delete if(request): 

如果以get方法请求的数据中包含参数fr_id(该参数的值 

用于指定将要被删除的添加好友请求的id信息)。 

if request.GET.has

key( fr_id 

fr

_

id=request.GET[ fr_id 】 

fr=get

_

object_or_404(FriendRequest pk=fr_id) 

try: 

fr delete() 

msg=U 已经成功删除用户%S发送给您的添加好友请 

求! %fr.sender.username 

except: 

msg=U 未能成功删除用户%s发送给您的添加好友请 

求! %fr_sender.username 

request.user.message set.create(message=msg) 

return HttpResponseRedirect(reverse('fr_list_page )) 

else: 

raise Http404( 参数错误! ) 

视图函数delete_fr的命名ud访问人口在urls.PY文件中添 

加。如下所示: 

url(r"^fr/delete/¥ ,delete_fr,name= delete_f 

这样.用户就可以通过ud地址http://localhost:8OOO/fr/ 

delete/?fr

_

id=<添加好友请求id>来删除<添加好友请求id>指定 

的添加好友请求了。 

3.5用户好友列表页面 

用户登录本系统之后。可以通过单击导航条中的“好友” 

链接进入自己的好友列表页面,在该页面中用户可以查看的内 

容包括:自己的好友、将自己添加为好友的用户以及好友近期 

发布的程序代码,如图4所示。 

实现用户好友列表页面显示功能的视图函数是 

friend

_

list

_

page,其定义如下所示: 

lI1 20 13.酾01与壤 

Django社会化程序代码共享系统 

您的好友 

好茇朔袭 

i璺 £盟臻£嫩hir喧蠡 曩 £ 直 ∞j 烈 i 点 

将您添加为好.菝的用户刊袭 

^垫妊|如雌挑照盎 鳃懿地g螳 秘 矗地 蜒 

好友艇近发布的程序代码 

|蕾 强 % 臻糍 譬 鬻 秣罄| 一湛灞豫 .。i t 瑚裳蔼甓 lt鼍。 

毽蛭锄 走疆 j j m !蜒¨ ; 

i 臻空 照 酲 莹箍酸鹰擐燕秘 堡 & §曼强; 蹦2O 2

0 品职藏 

涎£毫毯鞋 塾强魄銎矗鞭 啦 {{乎 2

07

争-0

瞬氅薪 

图4用户好友列表页面 

@Iogin required 

”…’定义视图函数friend—list_page。 

def friend

list

_

page(request): 

to friends=【friendship.to

_

friend for friendship in request. 

user.friend

set.all()J 

fromjriends= Ifriendship.fromjriend for friendship in 

request.user.to friend

_

set.all()】 

friend

snippets = Snippet.objects.filter (user__in= 

to

_

friends).order_by( -pub_date ) 

return list

_

detail.object_list( 

request, 

queryset=friend

_

snippets[:30], 

template

name= friend

list page.html , 

template_object_name= snippet . 

extra

context={ 

to

_

friends :to

_

friends, 

from

friends :fr0mjriends, 

show

user :True 

) 

) 

视图函数friend list.page在执行过,佶 中要利用模板文件 

friend

_

list page.html生成用户好友列表页_面的html代码.该模 

板文件的内容如下所示: 

<!—.此文件要以utf一8编码保存一一> 

{%extends base:html %) 

{%block title%1您的好友{{block.super}}{%endblock%} 

{%block head%}{{block.super}}{%endl: lock%) 

{%block content_l[itle%)您的好友{%endblock%) 

{%block content%) 

<h3>好友列表</h3> 

{%-f tojriends%} 

<ul class= friends“> 

{%for to_friend in to_friends%) 

<li class= friend ><a Itref= {{to_friend 

get_absolute

_

url}} >{{to_friend.username}}</a></li> 

{%endfor%) 

</ul><br> 

f%else%) 

(下转第13页) 

n 

PROGRAM LANGUAGEk  r

public int top; 

 … mr w … r , 一… *一… - t … t … …… -……-n u s 

Runtime.InteropServices.InAttribute《)】System.IntPtr hwnd, 

ref tagWINDOWINFO pwi); 

) 

LONG一>int 

public int right; 

///LONG一>int 

public int bottom 

可以看到.该工具软件包括API函数中参数所使用的结 

构体等是有力工具,现在只须在代码中调用NativeMethods. 

GetWindowlnfo就可以了,大大方便了编程者。 

) 

public partial class NativeMethods 

{ 

///Return Type:BOOL->int 

 ̄hwnd:HWND->HWND一 

///pwi:P\/、/lNDOWINFO一>tagWINDOWINFO 

6结语 

通过C#语言并调用Win32 API实现了一个能将任意窗口 

置顶的工具,在进行多任务处理同时打开几个窗口时,可通过 

【System.Ru九time-InteropServices.DIIImportAttribute( 

user32.dll”,EntryPoint=”GetWindowlnfo”)】 

【return:System.Runtime.InteropServices.MarshalAsAttribu 

此程序对某个窗口进行置顶.以方便后续操作。该工具是对没 

有内置窗口置顶选项的应用程序的有力工具。读者可参考随附 

的源代码根据自己的需求进一步修改提高。 

(收稿日期:2012—07—13) 

te(System.Runtime,JnteropServices.UnmanagedType.Boo1)】 

public static extern booI GetWindowlnfo([System. 

(上接第10页) 

定义视图函数delete_friend。 

def delete

friend(request): 

_

<D>您目前还没有好友 

</p>

{%endif%) 

<h3>将您添加为好友的用户列表</h3> 

{%If frOm_friends%) 

<ul class=‘。friends”> 

“ 如果以get方法请求的数据中包含参数fn(该参数的值用于指 

定将要从当前登录用户好友列表中删除的好友的用户名信息)。 

if request.GET.has

key( fn ): 

fn=request.GET[ fn 】 

friend:get

object__or_404(User,username=fn) 

_

{%for from

friend in from friends%) 

_

<li class=”friend”><a href=“{{from friend. 

get_absolute—url}}“>{{from_friend.username}}</a></Ii> 

try: 

friendship=Friendship.objects.get(from friend=request. 

user.to f rjend:friend) 

{%endfor%) 

</uI><br> 

(%else%} 

friendship.delete() 

msg=U 已经从您的好友列表中成功删除了用户%s{ % 

friend.username 

except: 

<p>目前还没有用户将您添加为好友}</p> 

{%endif%) 

<h3>好友最近发布的程序代 ̄5</h3> 

{%if snippet_list%} 

f%include“snippet tist.htmI”%) 

{%else%) 

msg=U 未能从您的好友列表中成功删除用户%S! % 

friend.username 

request.user.message_set.create(message=msg) 

return HttpResponseRedirect{fr iend.get absolute—urlO) 

else: 

<p>您的好友还没有发布过程序代码I</p> 

{%endif%) 

{%endblock%} 

raise Http404( 参数错误! ) 

视图函数delete

firend的命名url访问人口在urls.PY文件 

_

视图函数friend_list_page的命名ur】访问人口在urls.PY文 

件中添加,如下所示: 

url(r *friends/¥ ,friend

list

page,name= friend

list page 

中添加.如下所示: 

url(r friend/delete/¥ ,delete_friend,name= delete_friend,) J

_

这样,用户就可以通过ud地址http://localhost:8OOO/friend/ 

delete/?fn=<用户名>从自己的好友列表中删除<用户名>指定的 

好友了。 

3.6删除用户好友 

如果用户A打算将另一个用户B从自己的好友列表中删 

除(单向删除,即只删除从用户A到用户B的好友关系,但 

从用户B到用户A的好友关系仍然存在),那么用户A就要首 

先进入用户B的个人页面,然后单击该页面中的“将该用户从 

您的好友列表中删除”链接来达到这一目的。实现删除用户好 

友功能的视图函数是delete_firend,其定义如下所示: 

@Ioginrequired 

至此,全部讲述了社会化程序代码共享系统中包含的主要 

功能的实现过程。由于该系统中包含的用户注册、用户登录、 

修改用户登录密码、重设用户登录密码、RSS的生成以及程 

序代码标签等相关功能的实现比较简单,读者可以直接查阅 

附带的配套源代码进行学习和参考。 

(收稿日期:2012—07—09) 

脑螭淼 哆 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713055024a2173849.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信