• Django学习之表单(forms)


    我们的博客现在已经实现了博客列表的查看,博客的查看。现在该是我们实现创建和更新博客的时候了。

    要实现博客的创建和更新,我们需要学习Django表单的相关知识。

    在处理表单的过程中,Django表单功能做了哪些工作呢?

    • 传递数据的准备和重建
    • 为数据创建HTML表单
    • 从客户端接收和处理提交的表单和数据

    Django Form类是系统的核心组件。在django中, 模型描述的是一个对象的逻辑架构,这绵行为,它显现给我们的方式。与此类似,Form类描述的是一个表单和决定它是如何工作和显示的。

    一个模型类的字段映射到数据库的字段,与此类似,表单类的字段映射到HTML中表单的<input>元素。

    首先,创建一个创建博客的模板文件edit.html

    <!DOCTYPE html>
    <html>
        <head>
            <title>My Blog</title>
        </head>
        <body>
            <form  method='post'>
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit">Save</button>
            </form>
        </body>
    </html>

    恩,在主页上添加创建博客的链接(先不管美化,实现功能再说)

    <!DOCTYPE html>
    <html>
        <head>
            <title>My Blog</title>
        </head>
        <body>
            <form  method='post'>
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit">Save</button>
            </form>
        </body>
    </html>
    tmyyss@ubuntu:~/python/django/myproject/blog/templates/blog$ more index.html 
    <!DOCTYPE html>
    <html>
        <head>
            <title>My Blog</title>
        </head>
        <body>    
            <a href={% url 'blogs:edit' %}>edit</a>
            {% if blogs %}
            {% for blog in blogs %}
            <a href={% url 'blogs:detail' blog.id %}><h2>{{blog.title}}</h2></a>
            <p>Published {{blog.published_time}}</p>
            <p>{{blog.text | linebreaks}}</p>
            {% endfor %}
            {% else %}
            <p>No blog was published</p>
            {% endif %}
        </body>
    </html>

    接下来,添加Url

    from django.conf.urls import patterns,url
    
    from blog.views import *
    
    urlpatterns = patterns('',
        url(r'^$',index,name='index'),
        url(r'^edit/$',edit,name='edit'),
        url(r'^(?P<id>d+)/$',detail,name='detail'),
    )

    添加url对应的view函数

    from django.shortcuts import render,get_object_or_404,redirect
    from blog.models import Blog,PostForm
    import datetime
    
    def index(request):
        blogs=Blog.objects.all()
        return render(request,'blog/index.html',{'blogs':blogs})
    
    
    def detail(request,id):
        blog=get_object_or_404(Blog,pk=id)
        return render(request,'blog/detail.html',{'blog':blog})
    
    def edit(request):
        if request.method=='POST':
            form=PostForm(request.POST)
            if form.is_valid():
                post=form.save(commit=False)
                post.user=request.user
                post.created_time=datetime.datetime.now()
                post.published_time=datetime.datetime.now()
                post.save()
                return render(request,'blog/detail.html',{'blog':post})
        else:
            form=PostForm()
        return render(request,'blog/edit.html',{'form':form})

    好了,启动服务器,输入网址后,我们就可以添加博客文章了。

  • 相关阅读:
    delphi 数据导出 进度条自己生成
    在存储过程中编写正确的事务处理代码(SQL Server 2000 & 2005)
    在Delphi中如何获得SQL中存储过程的返回值?
    object-c中管理文件和目录:NSFileManager使用方法
    Delphi中动态链接库(DLL)的建立和使用
    开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)
    wince 程序无法执行的原因
    如果我写一个播放器
    busybox配置
    switch case被人忽视的一点!zt
  • 原文地址:https://www.cnblogs.com/tmyyss/p/4375082.html
Copyright © 2020-2023  润新知