Django 开发学习笔记(8)- 开发表单页面,让用户添加内容

这一节,我们添加表单项,让用户可以选择自己输入数据。这一节的代码几乎都是模板代码,如果一开始不理解的话,照着抄就可以了。

1、在应用路径下新建 forms.py 文件,输入以下代码

from django import forms

from blog.models import Topic

class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic
        fields = ['text']
        labels = {'text':'请输入话题内容'}

知识点:
(1)最简单的 ModelForm 类只包含了一个内嵌的 Meta 类,它的作用是告诉 Django 使用哪个模型创建表单,以及在表单中包含哪些字段;
(2)

model = Topic

表示,我们根据模型 Topic 创建表单;
(3)

fields = ['text']

表示,该表单只包含字段“text”

2、配置 urls

# 用于添加新主题的网页
url(r'^new_topic/$', views.new_topic, name='new_topic')

3、配置 views

def new_topic(request):
    """添加新主题"""
    if request.method != 'POST':
        # 未提交数据,创建一个新表单
        form = TopicForm()
    else:
        # POST 提交的数据,对数据进行处理
        form = TopicForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topics'))
    context = {'form': form}
    return render(request, 'blog/new_topic.html', context)

知识点:
(1)HttpResponseRedirect :用户提交了主题以后,我们将使用这个类将用户重定向到网页 ‘learning_logs:topics’;
(2)不要忘记掉写 reverse('learning_logs:topics') 中的 reverse。
函数 reverse() 根据指定的 URL 模型确定 URL,这意味着 Django 将在页面被请求时生成 URL。

4、配置模板 new_topic.html

{% extends "blog/base.html" %}

{% block content %}

    <form action="{% url 'blog:new_topic' %}" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">提交</button>
    </form>
{% endblock content %}

知识点:
(1)模板标签 {% csrf_token %}:来防止攻击者利用表单来获得对服务器未经授权的访问,这种攻击被称为“跨站请求伪造”;

(2)模板变量 {{ form.as_p }}:我们显示表单,从中可以知道 Django 使得完成显示表单的任务有多简单:我们只需要包含模板变量 {{ form.as_p }},就可以让 Django 自动创建显示表单所需的全部字段。
修饰符 as_p 让 Django 以段落的格式渲染所有的表单元素,这是一种整洁地显示表单的简单方式;

(3)记住模板标签和模板变量长什么样。

在话题列表页面,添加新话题的链接。

{% extends 'blog/base.html' %}

{% block content %}

    <ul>
        {% for topic in topics %}
            <li>
                <a href="{% url 'blog:topic' topic.id %}">{{ topic }}</a>
            </li>

        {% empty %}
            <li>话题没有被创建。</li>

        {% endfor %}
    </ul>

    <a href="{% url 'blog:new_topic' %}">添加新的话题</a>

{% endblock content %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值