- JsonResponse 是 HttpResponse 的子类,可以返回Json的键值对 例如 {‘a’:‘1’}
cookie 在django中可以存储数据,存储于客户端中,不安全
urls.py中
from django.urls import path, include
from . import views
urlpatterns = [
path('setck/', views.set_cook),
path('getck/', views.get_cook),
path('deleteck/', views.delete_cook),
]
views.py中
# 设置 cookie cookie一般存储数据在客户端
import datetime
# max_age 和 expires 都是设置过期时间
def set_cook(request):
rs = HttpResponse('设置cookie')
# rs.set_cookie('name', 'liping', max_age=1000)
rs.set_cookie('name', 'liping', expires=datetime.datetime(2019,9,9))
return rs
# 获取cookie
def get_cook(request):
rs = request.COOKIES
print(rs.get('name'))
return HttpResponse('获取cookie')
# 删除cookie
def delete_cook(request):
rs = HttpResponse('删除cookie')
rs.delete_cookie('name')
return rs
session 在django中也可以存储状态数据,存于服务器中,相对安全
urls.py中
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.Login.as_view(), name='clsLogin'),
path('home/', views.home, name='home'),
path('loginOut/', views.loginOut, name='loginOut'),
]
views.py中
from django.shortcuts import render, redirect, reverse
from django.views import View
from django.http import HttpResponse
class Login(View):
def get(self, request):
return render(request, 'formTest/login.html')
def post(self, request):
userName = request.POST.get('userName')
request.session['username'] = userName
request.session.set_expiry(None)#设置过期时间 如果写None就是默认两个星期
return redirect(reverse('home'))
def home(request):
userName = request.session.get('username')
return render(request, 'formTest/home.html', context={
'username':userName
})
def loginOut(request):
request.session.flush()#清除session中的数据
return redirect(reverse('home'))
模版 home.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
{{ username }}
</body>
</html>
模版 login.html 中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<input type="text" name="userName">
<input type="submit" value="登录">
</form>
</body>
</html>
django中的自带form表单
在models.py中创建一个表的类 用于存放数据
from django.db import models
class UserModel(models.Model):
userName = models.CharField(max_length=30, unique=True,)#unique 唯一
passWord = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return 'userName={}, passWord={}, email={}'.format(self.userName, self.passWord, self.email)
新建一个form.py文件,这就是django中的form
from django import forms
新建一个类 里面写一些显示的内容
class RegisterForm(forms.Form):
userName = forms.CharField(max_length=30, min_length=6)
passWord = forms.CharField(max_length=30, min_length=6, widget=forms.PasswordInput(attrs={'placeholder':'请输入密码'}))
passReplaceLLL = forms.CharField(max_length=30, min_length=6, widget=forms.PasswordInput(attrs={'placeholder':'请再次输入密码'}))
email = forms.EmailField()
views.py中
导入新建的模型表和form
from .models import UserModel
from .forms import RegisterForm
class Register(View):
def get(self, request):
实例化form表类
form = RegisterForm()
用上下文传给模版
return render(request, 'formTest/register.html', context={
'form':form
})
def post(self, request):
获取form里面的数据,进行逻辑操作
form = RegisterForm(request.POST) #获取form表单数据
if form.is_valid():
username = form.cleaned_data.get('userName')
password = form.cleaned_data.get('passWord')
passreplace = form.cleaned_data.get('passReplaceLLL')
email = form.cleaned_data.get('email')
print(password.encode(encoding='UTF-8'))
dataName = UserModel.objects.filter(userName=username)
print(dataName)
if dataName:
return HttpResponse('该用户已经存在')
else:
if password == passreplace:
UserModel.objects.get_or_create(userName=username, passWord=password, email=email)
return HttpResponse('注册成功')
else:
return HttpResponse('两次密码不一致,请重新输入')
else:
return HttpResponse('输入数据不合法')
模版 register.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
显示form传来的数据
{{ form.as_p }}
<input type="submit" value="注册">
</form>
</body>
</html>