添加搜索功能
利用在导航栏上的搜索框,搜索相关的topics。使用QuerySet的filter
筛选进行简单的搜索功能实现。
def search(request):
key_word = request.POST.get('key_word')
if not key_word:
messages.add_message(request, messages.WARNING, '请输入查询内容')
return HttpResponseRedirect(reverse('learning_logs:topics'))
topics = Topic.objects.filter(text__contains=key_word).all()
paginator = Paginator(topics, 10) # 每页25条
try:
page = request.GET.get('page')
except InvalidPage:
raise Http404('指定的页面不存在')
topics = paginator.get_page(page) # 获取指定页面
context = {
'topics':topics}
return render(request, 'topics.html', context)
类似topics
显示全部主题的视图函数,只是这里在前边使用request
获取的关键字key_word
对每条topic的text
字段进行筛选,text__contains
筛选包含有关键字的主题。对应的URL视图:
path("search/", views.search, name='search'),
在base.html的导航栏中修改内置的搜索表单:
<form class="form-inline my-2 my-lg-0" action="{% url "learning_logs:search"%} " method="post">
{% csrf_token %}
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="key_word">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
同样使用{% csrf_token %}
,防御跨站请求伪造(CSRF)攻击的机制。
在搜索框输入Similar
,查询:
这种查询机制较为简单,可以尝试使用 django-haystack进行搜索
添加用户资料
基本上所有的社交网站都会给用户提供资料页面,简单显示用户在网站的活动情况。当前使用的时Django默认的用户模型,且只有email
和username
作为个人信息,所以需要拓展用户模型