1.项目结构
2.知识点
1.记录网页的访问次数
编写视图
在 /rango/views.py 模块中定义一个新视图,命名为 track_url()。这个视图从 HTTP GET 请求参 数(rango/goto/?page_id=1)中提出所需的信息,更新相应网页的访问次数,然后重定向到真正 的 URL。
def track_url(request):
page_id = None
url = '/****/'
if request.method == 'GET':
if 'page_id' in request.GET:
page_id = request.GET['page_id']
try:
page = Page.objects.get(id = page_id)
page.views = page.views + 1
page.save()
url = page.url
except:
pass
return redirect(url)
redirect重定向到指定的页面或者是主页去
request.GET【**】获取id
Page.objects.get(id)获取要修改的对象之后再保存
添加 URL 映射
修改分类页面的模板
<a href="{% url 'goto' %}?page_id={{page.id}}">{{ page.title }}</a>
修改分类视图
pages = Page.objects.filter(category=category).order_by('-views')
2.增加个人资料页面
创建 profile_registration.html 模板,显示 UserProfileForm
<h1>Registration - Step 2</h1>
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
enctype="multipart/form-data" 属性,以此告诉 Web 浏览器和 服务器,不要编码任何数据,因为这个表单要处理文件上传。定义 UserProfileFormModelForm 类,处理这个新表单
编写 register_profile() 视图,捕获用户提供的个人信息
class UserProfileForm(forms.ModelForm):
website = forms.URLField(required=False)
picture = forms.ImageField(required=False)
class Meta:
model = UserProfile
exclude = ('user',)
@login_required
def register_profile(request):
form = UserProfileForm()
if request.method == 'POST':
form = UserProfileForm(request.POST, request.FILES)
if form.is_valid():
user_profile = form.save(commit=False)
user_profile.user = request.user
user_profile.save()
return redirect('index')
else:
print(form.errors)
context_dict = {'form':form}
return render(request, 'rango/profile_registration.html', context_dict)
使用 POST 请求中的数据重新创建 UserProfileForm 实例。因为还要处理图像上传 (用户的头像),因此我们通过 request.FILES 获取上传的文件。随后检查提交的表单数据是否 有效,即判断有没有正确填写表单字段。这里只是检查填写的 URL 是否有效,因为两个字段都是 可选的。 如果提交的数据有效,创建 UserProfile 实例:user_profile = form.save(commit=False)。我们 指定了 commit=False 参数,以便在保存到数据库中之前做些修改。我们要做的是把 UserProfile 实例与前面创建的 User 对象关联起来。成功保存 UserProfile 实例后,重定向到 index 视图。如 果出于什么原因,提交的表单无效,在控制台中打印错误。在真实的代码中,你可能会想以更好 的方式处理错误。 如果是 HTTP GET 请求,说明只是想要一个空表单,供用户填写。因此我们使用空的 UserProfileForm 实例(模板上下文中的 form)渲染 profile_registration.html 模把视图映射到 URL rango/register_profile/ 上
修改 MyRegistrationView 类中的 get_success_url() 方法,把重定向地址改为 rango/ add_profile
3.查看个人资料
4.列出所有用户