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
1
4
1
时
瞬氅薪
图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条)