前后端交互的方式有两种,一种是自己写个html页面,插入数据,一种是使用django自带的后台管理,插入数据

下面介绍方式1:

post.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/post" method="post">

    {% csrf_token %}

    <h1>写文章的</h1>
    <div>
            title:<input type="text" name="title">

    </div>
    <div>
            content:<input type="text" name="content">

    </div>

    <div>
        <select name="category">
            {% for category in categories %}
            <option value="{{ category.id }}">{{ category.name }}</option>
            {% endfor %}
        </select>
    </div>

    <div>
            <input type="submit" value="提交">

    </div>

</form>


</body>

 <form action="/post" method="post">

form这里指定是post还是get过来的数据走这个表单

urls.py里面的前面的那个路径,要和action的一致,如下:path('post',views.article),

 

{% csrf_token %}: csrf: 为了防止重复提交的,每次请求页面都会在form表单里面随机加一个csrf字符串,这个字符串是隐藏的,如果短时间内提交过快的话,csrf是一样的,会被认为是重复提交的,那么第二次请求就会被认为是不合法的,,解决方法:

1.在settings里面注释这个验证,不让django进行验证

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'user.middle_wares.TestMiddleWare'
]

 2. form表单中添加{% csrf_token %}

 

views.py

def article(request):
    print(request.method) #请求方式
    print(request.GET)# url?key=vlauye
    print(request.POST)#url  key-vlaue
    print(request.COOKIES)
    print(request.path_info)  #请求的路径 /post /cate
    print(request.FILES) #获取文件
    print(request.META) #请求头相关的都在这里
    print(request.body) #body里面的内容


    if request.method=='GET':
        return render(request,'post.html')
    else:
        title = request.POST.get('title')
        content = request.POST.get('content')
        category = request.POST.get('category')
        models.Article.objects.create(title=title,content=content,category_id=category)
        return HttpResponseRedirect('/')

 HttpResponseRedirect()是指重定向到哪个页面