tess

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


猜你喜欢

转载自www.cnblogs.com/sama/p/9281012.html
今日推荐