1.get请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文章提交界面</title>
</head>
<body>
<form action="/result" method="get">
文章标题:<input type="text" name="title">
文章内容:<input type="text" name="content">
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
aritcle.html
def article(request):
return render_to_response("aritcle.html")
def result(request):
print(request.method)#获取请求方法
print(request.GET["title"])#获取请求参数,title是input标签中的名字,不存在会报错
print(request.GET.get("content",None))#获取请求参数,content是input标签中的名字,不存在会报错
return HttpResponse("提交完成")
接收函数result,点击提交按钮后,跳转显示提交完成,可以获取上一步得到上一步的参数
获取的请求方法参数和请求方法类型
2.post方法获取提交参数与get方法类似。
用户注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>新用户注册!</h1>
<form action="" method="post">
{% csrf_token %}
<p>
用户 名:<input type="text" name="username", required="required"> * {{rename}}
</p>
<p>
密 码:<input type="text" name="password", required="required"> *
</p>
<p>
手机号码:<input type="text" name="phone">
</p>
<p>
<input type="submit" value="注册">
</p>
</form>
</body>
</html>
def regist(request):
if request.method == "POST":
username = request.POST.get("username", None)#获取用户输入
password = request.POST.get("password")
phone = request.POST.get("phone")
user = User1.objects.filter(name=username)#先从数据库查询是否已经注册过了
print(user)
if user:
res = "%s用户名已被注册,请更换一个" % username
return render(request, 'regist.html', {'rename': res})
else:
user1 = User1()
user1.name = username
user1.password = make_password(password)#密文报存密码
user1.phone = phone
user1.save() #保存到数据库
return render_to_response("login.html")
return render_to_response("regist.html")
登录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>欢迎登录!</h1>
<form action="my" method="post">
{% csrf_token %}
<p>
用户名:<input type="text" name="username", required="required"> *
</p>
<p>
密码:<input type="text" name="password", required="required"> *
</p>
<p>
<input type="submit" value="登录">
</p>
{{info}}
</form>
</body>
</html>
def login(request):
if request.method=="POST":
username = request.POST.get("username", None)
password = request.POST.get("password")
user = User1.objects.filter(name=username).first()
result = check_password(password,user.password)#####校验密码
print(user)
if user:
return HttpResponse("登录成功")
else:
return render_to_response("login.html",{"info":"用户名或密码错误"})
else:
return render_to_response("login.html",{"info":""})
2.跨站点伪造请求--csrf
{% csrf_token %},post请求中表单提交时防止跨站点伪造请求,增加这句话。
Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下:
1、在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值
2、当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性
3、当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御
3.密码加解密
密码如果明文存储到数据库的话不太安全,一般会加密存储,django里面提供了一套加密方法make_password,解密用check_password,需先导入