• Django学习(七)---添加新文章页面


    在template中添加add_article.html页面 (form  input)请求方法使用post

    这个页面涉及到了两个响应函数 1)显示页面的响应函数  2)表单提交的响应函数

    add_article.html如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title>增加新文章</title>
    </head>
    <body>
    <form action="{% url 'blog:edit_article' %}" method="post">
        {% csrf_token %}
        文章标题<input type="text" name='title' />
        <br>
        文章内容<input type="text" name='content'/>
        <br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    1)显示页面的响应函数

    views.py:

    def add_article(request):
        return render(request,'blog/add_article.html')

    配置url,urls.py:

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^index/$',views.index),
        url(r'^article/(?P<article_id>[0-9]+)/$',views.page,name='page'),
        url(r'^addarticle/$',views.add_article)
    ]

     2)表单提交的响应函数

    在表单里填写的内容,浏览器通过HTTP请求传递到后台的时候,这些数据都会被写在请求中,因此后台代码接受表单数据的过程实际上就是接受HTTP请求中夹带数据的过程。

    编辑响应函数

    使用 request.POST[' 参数名 '] 获取表单数据 (通过HTTP请求,传递的数据就放在request里,HTTP请求分为post,get等方法,request对不同方法创建了字典,用于存储数据,request.POST里面的键值对就是前端的数据)

    取得数据之后,要放入数据库中(models类):

    models.Article.objects.create(title,content)创建对象

    views.py如下(return响应后的页面,这里跳转到了主页面)

    def edit_article(request):
        title = request.POST.get('title','TITLE')# 第二个参数是默认值
        content = request.POST.get('content','CONTENT')
        models.Article.objects.create(title=title,content=content)
        articles = models.Article.objects.all()
        return render(request,'blog/index.html',{'articles':articles})

    urls.py:

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^index/$',views.index),
        url(r'^article/(?P<article_id>[0-9]+)/$',views.page,name='page'),
        url(r'^addarticle/$',views.add_article),
        url(r'^eidtarticle/$',views.edit_article,name='edit_article'),
    ]

    add_article.html中表单form的action添加

    <form action="{% url 'blog:edit_article' %}" method="post">

    打开服务器 localhost:8000/blog/editarticle

    在表单中输入后,点击提交,页面会出现

    禁止访问(403)

    CSRF验证失败,响应中断

    这是安全性问题,如果用post提交表单,要在form中加入 {% csrf_token %} 用于防范csrf(跨站请求伪造)

    <!DOCTYPE html>
    <html>
    <head>
        <title>增加新文章</title>
    </head>
    <body>
    <form action="{% url 'blog:edit_article' %}" method="post">
        {% csrf_token %}
        文章标题<input type="text" />
        <br>
        文章内容<input type="text" />
        <br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    index.html中添加新文章加上url

    <!DOCTYPE html>
    <html>
    <head>
        <title>第一篇博客</title>
    </head>
    <body>
    <h1><a href="#">我的博客</h1>
    <h3><a href="{% url 'blog:add_article' %}">添加新文章</a></h3>
    {% for article in articles %}
        <a href="{% url 'blog:page' article.id %}">{{article.title}}</a>
        <br/>
    {% endfor %}
    </body>
    </html>

    打开服务器 localhost:8000/index, 点击添加新文章,完成文章标题和内容的填写,点击提交

  • 相关阅读:
    可视化百分比数据,Excel图表展示小技巧
    巧用宏录制,轻松制作Excel简易查询小系统
    Excel也能制作电子印章,你见过吗?学会了职场不求人
    ​21个Shift组合快捷键,学会了想加班都难
    Excel中关于日期时间的小知识小技巧,你还记得多少?
    自动添加单元格边框,Excel有妙招,两个技巧任意选
    [asp.net] 通过JS实现对treeview控件的复选框单选控制。
    编译器把getset访问器编译成了方法get_method()/set_method()
    sql MERGE
    动态添加特性
  • 原文地址:https://www.cnblogs.com/Lovebugs/p/7193643.html
Copyright © 2020-2023  润新知