用户个人页面管理

首先是用户的注册功能

1) 在user的视图函数中定义:

from django.shortcuts import render,HttpResponse
from user.models import User  # 导入user,查看用户是否被注册
from course import views as course_views  # 与视图联系

def register_handler(request):
    if request.method != 'POST':
        return HttpResponse(status=403)
    context =request.context   # 修改过后的,修改前是{}
    account=request.POST.get('account')
    password = request.POST.get('password')
    try:
        user_exists= User.objects.filter(account = account).exists()
        if not user_exists:
            user = User(account=account,password=password)
            user.save()
            request.session['session_user'] ={'id':user.id,'account':user.account}
        else:
            context['register_message']= '账号已存在'
    except:
        context['register_message']='服务器异常'
    finally:
        return course_views.index_handler(request)

2)在base文件中修改代买,使其能够了解到用户是否注册以及注册后的显示:

<!-- 注册 -->
<div id="register"
     {% if not register_message %}  <!-- 添加 -->
     hidden="hidden">
    {% endif %}
    <h2 class="form_p">注册</h2>
    <p id="register_message">
        {{ register_message }}    <!-- 添加 -->
        <!--信息有误-->
    </p>
    <form action="{% url 'user_register' %}" method="post" id="register_form">
        {% csrf_token %}
        <input id="register_account" type="text" name="account" placeholder="账号(数字、英文、下换线,8-16位)"><br/>
        <input id="register_password" type="password" name="password" placeholder="密码(数字、英文、下换线,6-16位)"><br/>
        <!--<input type="password" name="repassword" placeholder="确认密码"><br/>-->
        <input id="register_submit" type="submit" value="注册">
    </form>
</div>

3)新建一个中间件文件

from django.utils.deprecation import MiddlewareMixin

class MyMiddleware(MiddlewareMixin):
    def __init__(self,get_response=None):
        super().__init__(get_response)
        # 初始化中间件
        print('init_mymiddleware')

    def process_request(self,request):
        # 在request对象中添加一个context字典
        request.context = {}
        # 如果session中有session_user
        if 'session_user' in request.session.keys():
            # 把session中的session_user添加到request.context中
            request.context['session_user'] = request.session['session_user']



    def process_response(self,request,response):
        # 必须return response
        print('process_response')
        return response

在settings中加入中间件:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'middleware.MyMiddleware'  # 添加的中间件
]

【此时的course的视图函数代码】

from django.shortcuts import render
from .models import Course,Category

# Create your views here.
def index_handler(request):
    context = request.context
    category_s = Category.objects.all()
    course_data_s = []
    for category in category_s:
        course_data_s.append(
            {
                'category':category.name,
                'course_s':category.courses_set.all()
            }
        )
    context['course_data_s'] = course_data_s
    return render(request,'index.html',context)


def course_handler(request,course_id):
    return None


def video_handler(request,course_id):
    return None


def videoStream_handler(request,course_id):
    return None
  1. 完成后启动服务,注册账号,刷新数据库user,会出现注册好的用户信息!若是已经注册过的,它直接显示账号已存在!
    在这里插入图片描述
    5)使页面只显示用户知否登录和登录后的状态,我们需要在base的文件中的登录处修改代码,用if语句判断:
</span>
    <span class="user">
        {% if not session_user %}
        <a href="javascript:show('login')">登录</a>/
        <a href="javascript:show('register')">注册</a>
        {% else %}
        <!-- 已经登录显示的内容 -->
        你好:
        <a href="{% url 'user_index' %}">{{ session_user.account }}</a>
        <a href="{% url 'user_logout' %}">注销</a>
    {% endif %}
    </span>

与之对应的中间件部分是:

    def process_request(self,request):
        # 在request对象中添加一个context字典
        request.context = {}
        # 如果session中有session_user
        if 'session_user' in request.session.keys():
            # 把session中的session_user添加到request.context中
            request.context['session_user'] = request.session['session_user']

退出功能

1)在用户的views视图函数中先导包,然后配置退出功能:

from django.shortcuts import render,HttpResponse,redirect,reverse
from user.models import User  # 导入user,查看用户是否被注册
from course import views as course_views

def logout_handler(request):
    request.session['session_user'] =None
    return redirect(reverse('course_index'))

然后首页只会显示登录和注册了!
在这里插入图片描述

登录功能

1)首先在视图函数中定义这个功能:

def login_handler(request):
    if request.method != 'POST':  # 判断是否为post请求
        return HttpResponse(status=403)
    context= request.context
    account = request.POST.get('account')
    password = request.POST.get('password')
    user_s = User.objects.filter(account=account,password=password)
       if user_s:
        user = user_s[0]
        request.session['session_user'] = {'id': user.id, 'account': user.account}
        return redirect(reverse('course_index')) # 第一种方法
        # context['session_user']= {'id': user.id, 'account': user.account} # 第二种方法!
    
    else:
        context['login_message'] = '账号或密码错误'
   	    return course_views.index_handler(request)

2)找到base文件,修饰登录部分的代码:

<!-- 登录 -->
<div id="login"
     {% if not login_message %}  <!-- 添加的判断语句 -->
     hidden="hidden">
    {% endif %}
    <h2 class="form_p">登录</h2>
    <p id="login_message">
    {{ login_message }}
        <!--信息有误-->
    </p>
    <form action="{% url 'user_login' %}" method="post" id="login_form">
        {% csrf_token %}  <!-- 添加地址与token -->
        <input id="login_account" type="text" name="account" placeholder="账号"><br>
        <input id="login_password" type="password" name="password" placeholder="密码"><br>
        <input id="login_submit" type="submit" value="登录">
    </form>
</div>

完成操作后,用户可以正常的登录注册与退出了!

个人页面的显示

1)首先是用户的视图函数的修饰:

from django.shortcuts import render,HttpResponse,redirect,reverse
from user.models import User
from course import views as course_views

# Create your views here.
def index_hander(request):
    # 得到request中的context对象
    context = request.context
    # 得到session中保存登录的信息
    # 如果session中没有session_user这个键,会报错,所以如果没有用户登录,不允许访问user中的index_handler,后续在中间件中会加入访问权限
    session_user = request.session['session_user']
    # 得到当前用户的user对象
    user = User.objects.get(id=session_user.get('id'))
    # 把user对象封装到context中
    context['user'] = user
    # 如果是GET请求,要展示用户的详细信息
    if request.method == 'GET':
        # 渲染模板
        return render(request,'user.html',context)
    # 如果不是GET请求,视为POST请求,为用户修改个人信息
    else:
        # 得到表单中提交的数据
        # 【注意】
        #   这里需要对用户提交的数据进行表单验证,必须确定信息符合规范,才可以写入数据库
        #   推荐使用正则表达式进行验证,同学们可以自行尝试
        #   对于不符合规范的数据提交,可以返回403
        user.username = request.POST.get('username')
        user.gender = request.POST.get('gender')
        user.tel = request.POST.get('tel')
        # 数据保存
        user.save()
        # 重定向到用户主页
        return redirect(reverse('user_index'))

2)修改user.html文件

{% extends 'base.html' %}

{% block title %}

{% endblock %}

{% block article %}
    <section class="main_section">
        <hr>
        <section id="user_manage">
            <nav>
                <p><a href="{% **url 'user_index**' %}">个人资料</a></p>
                <p><a href="*{% url 'user_course' %}*">我的课程</a></p>
                <p><a href="*{% url 'user_shoppingCart' %}*">购物车</a></p>
            </nav>
            <section class="user_info">
                <div class="user_info_wrapper">
                    <ul>
                        <li>
                            <label>&#12288;号:</label><span>{{ *user.account* }}</span>
                        </li>
                        <li>
                            <label>&#12288;额:</label><span>{{ *user.money* }}</span>
                        </li>
                    </ul>
                    *<form action="{% url 'user_index' %}" method="post">
                        {% csrf_token %}*
                        <ul>
                            <li>
                                <label>用户名:</label>
                                <input type="text" name="username" value="*{{ user.username }}">*
                            </li>
                            <li>
                                <label>&#12288;别:</label>
                                *{% if not user.gender %}
                                    <input type="radio" name="gender" value="0" checked="checked"><input type="radio" name="gender" value="1">{% else %}
                                    <input type="radio" name="gender" value="0"><input type="radio" name="gender" value="1" checked="checked">{% endif %}*
                            </li>
                            <li>
                                <label>手机号:</label>
                                <input type="text" name="tel" value="*{{ user.tel }}*">
                            </li>
                            <li>
                                <input type="submit" value="修改">
                                <input type="reset" value="重置">
                            </li>
                        </ul>
                    </form>
                </div>
            </section>
        </section>
    </section>
{% endblock %}

修改完成后,就可以进入用户的页面!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值