Pinax源代码分析15 - avator, locations, friends_objects

本文分析了Pinax框架中的多个应用,包括头像管理、位置跟踪、物品交换等功能模块的实现方式及遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pinax源代码分析15 avator, locations, friends_objects

avator

头像app

    (r'^avatar/', include('avatar.urls')),

urlpatterns = patterns('avatar.views',
    #
修改头像
    url('^change/$', 'change', name='avatar_change'),
    #
删除头像
    url('^delete/$', 'delete', name='avatar_delete'),
)

测试的时候报错,只要一上传头像就抛出异常:decoder jpeg not available。
Google了一下,是PIL的问题。需要修改PIL的编译配置,问题是安装Pinax的虚拟环境的时候,Pinax就找不到系统已经安装的PIL,采用的已经是Google到的hack,相当于在Pinax的虚拟环境里又安装了一个别人编译好的PIL……放弃修复。

swaps

用户之间交换物品的app,不太感兴趣。

关闭swaps app

修改settings.py,注释掉INSTALLED_APPS中的swaps
注释掉urls.py中的:
(r'^swaps/', include('swaps.urls')),
修改site_base.html模板,去掉:
<td class="tab rtab_swaps"><div><a href="{% url offer_list_all %}">{% trans "Swaps" %}</a></div></td>

flag

越过。

locations

app 是记录某一个时间,你所在的地点。基于Yahoo Map
需要注册 yahoo map api key。访问 https://developer.yahoo.com/wsregapp/ 注册,将得到的key复制到settings
YAHOO_MAPS_API_KEY

url

    (r'^locations/', include('locations.urls')),

逻辑与模板

url(r'^$', 'locations.views.your_locations', name='loc_yours'),

显示你的所有 check in 过的地点。点击任意一个地点的说明就会在地图上显示这个点。
该页有一个搜索form,提交到/new/

url(r'^new/$', 'locations.views.new', name='loc_new'),

接受your_locations 提交过来的字符串,然后使用
geopy.geocoders.Yahoo(lazy_key())
(place, (lat, lng)) = list(y.geocode(p, exactly_one=False))[0]
来获得地点的经纬度。将它们传递给 checkin.html 模板,作为隐藏域。表单提交地址为/checkin/

url(r'^checkin/$', 'locations.views.checkin', name='loc_checkin'),

记录地点的经纬度、check in 的用户、时间。

url(r'^friends/checkins/$', 'locations.views.friends_checkins', name='loc_friends'),

好友的checkins

url(r'^nearby/checkins/$', 'locations.views.nearby_checkins', name='loc_nearby'),

临近的checkins。同样依赖于geopy。我这里一直显示错误:'module' object has no attribute 'arc_degrees'。


friends_objects

urls.py 中的最后几行:

urlpatterns += patterns('',
    url('^photos/friends_photos/$', 'friends_app.views.friends_objects', kwargs=friends_photos_kwargs, name="friends_photos"),
    url('^blog/friends_blogs/$', 'friends_app.views.friends_objects', kwargs=friends_blogs_kwargs, name="friends_blogs"),
    url('^tweets/friends_tweets/$', 'friends_app.views.friends_objects', kwargs=friends_tweets_kwargs, name="friends_tweets"),
    url('^bookmarks/friends_bookmarks/$', 'friends_app.views.friends_objects', kwargs=friends_bookmarks_kwargs, name="friends_bookmarks"),
)

所有的这些urls都由 friends_app.views.friends_objects 处理。以 friends_photos 为例,传递给 view 的参数为 friends_photos_kwargs
friends_photos_kwargs = {
    "template_name": "photos/friends_photos.html",
    "friends_objects_function": lambda users: Image.objects.filter(member__in=users),
}
template_name
决定view将采用的模板。
friends_objects_function
接受用户所有的朋友作为参数:
    dictionary = {
        "object_list": friends_objects_function(friends),
    }
之后dictionary 会被传递给模板:
        {% for photo in object_list %}
            ……
        {% endfor %}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值