from django.shortcuts import render, redirect, HttpResponse
from app01 import models
from static.utils.Pager import PageInfo
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
import random, os
from static.utils.check_code_random import rd_check_code
from django.forms import Form
from django.forms import fields, widgets
from django.core.exceptions import ValidationError
from app01.forms import MyRegisterForm, MyLoginForm
def index(request, *args, **kwargs):
'''
主页
:param request:
:param args:
:param kwargs:
:return:
'''
result = request.session.get('username')
if result:
# 分页
# 获取当前URL request.path_info
current_page = request.GET.get('page')
base_url = request.path_info
# 标签分类
# 基本方式一
# type_id = int(kwargs.get('type_id')) if kwargs.get('type_id') else None
# if type_id:
# article_list = models.Article.objects.filter(article_type_id=type_id)
# else:
# article_list = models.Article.objects.all()
# 方式二
content = {}
type_id = int(kwargs.get('type_id')) if kwargs.get('type_id') else None
if type_id:
content['article_type_id'] = type_id
# 注意此处 filter条件为空字典的时候获取全部数据
# ******分页
all_count = models.Article.objects.filter(**content).count()
page_info = PageInfo(current_page, all_count, 10, base_url, 11)
# ******分页
article_list = models.Article.objects.filter(**content)[page_info.start():page_info.end()]
type_choice = models.Article.type_choice
login_flag = True
return render(request, 'index.html', {
'type_choice': type_choice,
'article_list': article_list,
'type_id': type_id,
'page_info': page_info,
'login_flag': login_flag
})
else:
return redirect('/login/')
def login(request):
'''
登陆界面
:param request:
:return:
'''
if request.method == 'GET':
my_login_form = MyLoginForm()
return render(request, 'login.html', {'my_login_form': my_login_form})
else:
input_code = request.POST.get('code')
session_code = request.session.get('code')
my_login_form = MyLoginForm(request.POST)
# form表单验证
if my_login_form.is_valid():
# 验证码验证
if input_code.upper() == session_code.upper():
# 账号密码验证
input_username = request.POST.get('username')
input_password = request.POST.get('password')
result = models.UserInfo.objects.filter(username=input_username, password=input_password).first()
if result:
request.session['username'] = result.username
return redirect('/idnex/')
else:
return render(request, 'login.html', {'my_login_form': my_login_form, 'user_error': '账号或密码错误'})
else:
return render(request, 'login.html', {'my_login_form': my_login_form, 'code_error': '验证码错误'})
else:
return render(request, 'login.html', {'my_login_form': my_login_form})
def check_code(request):
img, code = rd_check_code()
stream = BytesIO()
img.save(stream, 'png')
data = stream.getvalue()
request.session['code'] = code
return HttpResponse(data)
def register(request):
if request.method == 'GET':
my_register_form = MyRegisterForm(request)
return render(request, 'register.html', {'my_register_form': my_register_form})
else:
# *****重点****
# 发送文件时需要将files传入
my_register_form = MyRegisterForm(request, request.POST, files=request.FILES)
if my_register_form.is_valid():
my_register_form.cleaned_data.pop('password2')
my_register_form.cleaned_data.pop('code')
# 获取文件存储
file_obj = request.FILES.get('avatar')
file_obj = request.FILES.get('avatar')
file_path = os.path.join('static', 'avatar', file_obj.name)
my_register_form.cleaned_data['avatar'] = '/' + file_path
print(my_register_form.cleaned_data)
# 写入头像信息
with open(file_path, 'wb') as f:
# chunks() 括号一定要加
for chunk in file_obj.chunks():
f.write(chunk)
# 写入数据库
models.UserInfo.objects.create(**my_register_form.cleaned_data)
return redirect('/login/')
else:
return render(request, 'register.html', {'my_register_form': my_register_form})
def upload_avatar(request):
file_obj = request.FILES.get('avatar')
file_path = os.path.join('static', 'avatar', file_obj.name)
with open(file_path, 'wb') as f:
for chunk in file_obj.chunks():
f.write(chunk)
return HttpResponse(file_path)
def foo():
models
tess
猜你喜欢
转载自www.cnblogs.com/sama/p/9281012.html
今日推荐
周排行