Python编程从入门到实践-第19章-用户账户




前言

  Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。

  在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目。你还将学习Django如何防范对基于表单的网页发起的常见攻击。

  然后,我们将实现一个用户身份验证系统。你将创建一个注册页面,供用户创建账户,并让有些页面只能供已登录的用户访问。接下来,我们修改一些视图函数,使得用户只能看到自己的数据。你将学习如何确保用户数据的安全


一、让用户能够输入数据

  当前,只有超级用户能够通过管理网站输入数据。我们不想让用户与管理网站交互,因此我们将使用Django的表单创建工具来创建让用户能够输入数据的页面。

1. 添加新主题

  创建基于表单的页面的方法几乎与前面创建网页一样:定义一个URL,编写一个视图函数并编写一个模板。一个主要差别是,需要导入包含表单的模块forms.py

  • (1) 用于添加主题的表单

表单:让用户输入并提交信息的页面

新建form.py,将其存储到models.py所在的目录中

from django import forms
from .models import Topic


class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic
        fields = ['text']
        labels = {'text': ''}
使用ModelForm创建表单,它根据在第18章定义的模型中的信息自动创建表单。一个内嵌的Meta类,它告诉Django根据哪个模型创建表单,以及在表单中包含哪些字段。
我们根据模型Topic创建一个表单,该表单只包含字段text。不为字段text生成标签。
  • (2) URL模式new_topic

urls.py

--snip--
urlpatterns = [
    --snip--
    "用于添加新主题的页面"
    re_path(r'^new_topic/$', views.new_topic, name='new_topic')
]
  • (3) 视图函数new_topic()

函数new_topic()需要处理两种情形:刚进入new_topic网页(在这种情况下,它应显示一个空表单);对提交的表单数据进行处理,并将用户重定向到网页topics:

  创建Web应用程序时,将用到的两种主要请求类型是GET请求和POST请求。对于只是从服务器读取数据的页面,使用GET请求;在用户需要通过表单提交信息时,通常使用POST请求。根据请求的类型,我们可以确定用户请求的是空表单(GET请求),还是要求对填写好的表单进行处理(POST请求)。

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reserve

from .forms improt TopicForm

--snip--
def new_topic(request):
    """添加新主题"""
    if request.method != 'POST':
        # 未提交数据,创建一个新表单
        form = TopicForm()
    else:
        # POST提交数据,对数据处理.我们使用用户输入的数据(它们存储在request.POST中)创建一个TopicForm实例
        form = TopicForm(request.POST)
        # is_valid()核实用户填写了所有必不可少的字段,且输入的数据与要求的字段类型一致
        if form.is_valid():
            # 表单中的数据写入数据库
            form.save()
        return HttpR
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值