2023.4.27 Django学习笔记

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.列出所有用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

github_czy

多谢老哥奖励的咖啡!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值