Django登录
def login(request):
if request.method == 'GET':
goods = Good.objects.filter(id__gt=1, id__lte=6)
return render(request, 'login.html', {'goods': goods})
elif request.method == 'POST':
# 登录
# 接受客户端发送的数据
username = request.POST.get('username')
password = request.POST.get('password')
# 验证用户名以及密码
users = UserModel.objects.filter(username=username, password=password)
if users.exists():
# 验证成功
res = redirect(reverse('index'))
# coikie
# 1、cookie是储存在客户端
# 2、cookie一般不跨域,不能夸浏览器
# 3、cookie一般是小于4kb的文本
# 4、cookie是有服务器设置的,cookie内容一般和当前用户相关
# res.set_cookie('userid', users.first().id)
# cookie过期时间
# 1、默认过期时间为浏览器会话时间(浏览器关闭会删除)
# 2、expires 设置一个过期时间,datetime
# 3、max_age:设置从当前时间开始进过的秒数
# res.set_cookie('userid', users.first().id, max_age=20)
# d = datetime.datetime(2030, 1, 2)
# res.set_cookie('userid', users.first().id, expires=d)
# session
# 设置session
request.session['userid'] = users.first().id
# 设置session过期时间
request.session.set_expiry(86400)
# 进入首页
# return redirect(reverse('index'))
return res # 相当于上面那句
return render(request, 'login.html')
ps:
dango、flask、tornado一些区别**
django return方式
- render(request, ‘login.html’, {‘goods’: goods})只是可以页面渲染,传入数据给模板
- redirect(reverse(‘index’)) 只是做页面跳转,不能带数据
- HttpResponse(‘ok’) 返回一个ok的页面
- return JsonResponse({‘msg’: ‘修改成功’, ‘code’: 1, ‘date’: data, }) 前后端分离返回json数据
flsk return方式
1.return render_template('index.html', num=num, now=now) 相当于django中render
2.return redirect(url_for('admin.admin_category')) 相当于django中的redirect 跳转页面
3. return 'ok' 相当于django中的HttpResponse
tornado return方式
self.write('注册失败')
self.render('register.html', username=usernaem)
self.redirect(self.reverse_url('login'))
# tornado 注册
class RegisterHandler(tornado.web.RequestHandler):
def get(self):
username = self.get_body_argument('username')
# self.render('register.html')
self.render('register.html', username=usernaem)
def post(self):
self.get_body_argument
username = self.get_argument('username')
password = self.get_argument('password')
sex = self.get_argument('sex')
# 检测用户名是否是否已经存在
user = session.query(Person).filter_by(name=username).first()
if user:
self.write('该用户名已注册')
else:
# 注册
person = Person()
person.name = username
person.password = my_md5(password)
person.sex = True if sex == 'man' else False
try:
session.add(person)
session.commit()
except:
session.rollback()
session.flush()
self.write('注册失败')
else:
# 注册成功
# 跳转到登录界面
self.redirect(self.reverse_url('login'))
-
接受前端返回的数据 (post)
Django 用 username = request.POST.get(‘username’)
flask 用 username = request.form.get(‘username’)
Tornado 用username = self.get_argument(‘username’) # get_body_argument -
得到数据库的数据
Django 用 注意用get没找到数据会报错,但是filter没找到不会报错 user = user.objects.get(id=1) # filter、all flask 用 user = user.query.gey(1) # get 只需要将id填进去即可 user = user.query.filter(User.id==1) # filter 注意2个等号 user = user.query.filter_by(id=1) # filter_by 不需要表名,一个等号 Tornado 用 基本和flask一致,但是其query需要带表名, user = session.query(Person).filter_by(name=username)
-
保存至数据库
1、Django person = Person() person.name = username user.save() 保存即可 2、flask 用 这个用db.session person = Person() person.name = username try: db.session.add(person) # 成功提交 db.session.commit() # 保存 except: db.session.rollback() # 失败回滚 db.session.flush() # 刷新缓冲区 3、Tornado 这个用session person = Person() person.name = username try: session.add(person) session.commit() except: session.rollback() session.flush() self.write('注册失败')