django前后端交互
前后端交互的方式有两种,一种是自己写个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()是指重定向到哪个页面

浙公网安备 33010602011771号