zoukankan      html  css  js  c++  java
  • django 登陆注册

    这篇主要把自己在django中的练习记录下来,方便查看和记忆。

    操作环境:python3.4.3   django 1.11.5

    1. 登陆界面实现

      (1) 编辑models.py文件,添加login表,同时在表中添加数据

    class Login(models.Model):
            username = models.CharField(max_length=30)
            password = models.CharField(max_length=30)
            def __str__(self):
                    return 'u %s %s' % (self.username,self.password)
    

      (2)编辑views.py文件,添加login函数。

    def login(request):
            error = False
            name = request.POST.get('username',None)
            pwd = request.POST.get('password',None)
            print(name,pwd)
            result = Login.objects.filter(username=name,password=pwd).count()
            print(result)
            if result == 1:
                    request.session['is_login'] = {'userv':name}
                    return HttpResponseRedirect('/hostmanager/index/')
            elif name == None and pwd == None:
                    return render_to_response('manager_login.html',context=csrf(request))
            elif not (name and pwd):
                    return render_to_response('manager_login.html',context=csrf(request))
            else:
                    error = True
                    return render_to_response('manager_login.html',{'error':error})
    

      这里可以先忽略session和csrf,在视图中获取html form中的'username'和'password',同时在Login表中匹配数量,可以匹配到,则跳转值index页面,如果输入为空或不存在则继续在登陆界面,如果用户名和密码不匹配则留在登陆界面同时输出错误信息。

      (3)新建template目录,编辑manager_login.html

              <div class="header">
                            <a href="#nowhere"><img src="/static/img/header.jpg" ></a>
                    </div>
                    <hr>
                    <div class="content" style="display:block;">
                            <div class="left_picture"><img src="/static/img/left.jpg"></div>
                            <div class="right_content" style="display:block;">
                    <form method="POST">
                                    {% csrf_token %}
                    <div class="hostname"><span class="redcolor">*</span> 用户名:<input type="text" name="username"></div>
                    <br>
                    <div class="password"><span class="redcolor">*</span> 密码:<input type="password" name="password"></div>
                    <br>
                    <div class="forget">
                    <span><input type="checkbox">自动登陆</span>
                    <span><a href="#nowhere">忘记密码?</a></span>
                    </div>
                    <br>
                    <div class="submit"><input type="submit" value="登 陆"></div>
                    </form>
                    </div>
                    <div style="clear:both"></div>
                    <a href="/hostmanager/register/"><div class="register">免费注册</div></a>
                            {% if error %}
                                    <p class="warn" style="color:red;">Please submit right username or password</p>
                            {% endif %}
                    </div>
    

      (4)添加路径到urls.py文件中,url(r'^login/$',login),  

    结果如图

    如果出现错误则

     

     2.   注册页面实现

      (1)编辑views.py文件,编写注册视图函数

    def register(request):
            status = False
            message = False
            name = request.POST.get('username',None)
            pwd = request.POST.get('password',None)
            email = request.POST.get('email',None)
            result = Login.objects.filter(username=name).count()
            if name == None and pwd == None:
                    return render_to_response('host_register.html')
            elif result == 0:
                    if not(name and pwd):
                            message = True
                            return render_to_response('host_register.html',{'message':message})
                    else:
                            Login.objects.create(username=name,password=pwd)
                            send_mail('登陆注册','注册成功','150xxxxx175@163.com',[email,'150xxxxx175@163.com','10xxxxxxx1@qq.com'],)
                            return HttpResponseRedirect('/hostmanager/login/')
            elif not(name and pwd):
                    message = True
    		return render_to_response('host_register.html',{'message':message})
            else:
                    status = True
                    return render_to_response('host_register.html',{'status':status})
    

      在这里面做了一些判断,先获取到name和pwd,并且根据name从数据库中获取数量,如果获取不到name和pwd,则为None,则返回原始页面;如果数量result为0,则判断name和pwd是否都存在,如果都存在则可以注册,在Login表中创建一条新数据,并且发送注册成功邮件,返回到登陆页面;如果name和pwd都不存在则输出错误信息;如果数量不等于0,则说明用户已经被注册。

      (2)编写模板,host_register.html

    <div class="content" style="display:block;">
                <div class="left_content" style="display:block;">
                    <h2>注册新用户</h2>
                    <form action="/hostmanager/register/" method="POST">
    			<div class="hostname"><span class="redcolor">*</span> 用户名:  <input type="text" name="username"></div>
                    <br>
    			<div class="password"><span class="redcolor">*</span> 密码:<input type="password" name="password"></div>
                    <br>
    			<div class="repassword"><span class="redcolor">*</span>确认密码:<input type="password" name="password"></div>
                    <br>
    			<div class="email"><span class="redcolor">*</span>邮箱:<input type="text" name="email"></div>
                    <br>
    			<div class="submit"><input type="submit" value="同意协议注册"></div>
                    </form>
                </div>
                    {% if status %}
                    <span class="register">该用户名已被注册</span>
                    {% endif %}
                    {% if message %}
                    <span class="register">请输入用户名和密码</span>
                    {% endif %}
                <div style="clear:both"></div>
                <div class="right_picture"><img src="/static/img/left.jpg"></div>
    </div>
    

      (3)添加路径,url(r'^register/$',register),

    实现如图

      如果用户名和密码为空的话,则输出错误信息

       注册成功后,会发送邮件

       总结:在这里基本实现了注册的功能,但是确认密码功能没有写,邮箱也只能发给指定的一个邮箱,也没有进行输入验证,这部分后期有时间的话在做修改吧;邮箱验证使用的是163邮箱,默认会开启smtp,qq邮箱默认没有开启,需要到邮箱设置中开启。

    3.  send_mail

      在上面的注册功能中使用到了send_mail,发送邮件。from django.core.mail import send_mail

      send_mail这个函数有四个必选参数:正文,主题,发件人和收件人列表,前面三个均是一个字符串,最后一个是一个邮箱地址组成的字符串列表。

      在settings.py中添加  

      EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
      EMAIL_USE_TLS = True
      EMAIL_HOST = 'smtp.163.com'
      EMAIL_PORT = '25'
      EMAIL_HOST_USER = '150xxxxx175@163.com'
      EMAIL_HOST_PASSWORD = 'password'
      SERVER_EMAIL = EMAIL_HOST_USER
      DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

      邮件中使用EMAIL_HOST和EMAIL_PORT设置指定的SMTP主机和端口发送,EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD用来指定验证SMTP主机,EMAIL_USE_TLS 和EMAIL_USE_SSL控制是否使用响应的加密链接。

  • 相关阅读:
    编写可读性代码的艺术
    web前端常见的加密算法介绍
    git 遇到的问题
    Vue.js使用proxytable跨域的路径问题
    设置动画元素
    解决echarts图表在显示没有数据后再切换后渲染不出的问题
    svn回滚到之前的版本
    插件用法--视频播放video.js
    网页适配
    不跳转页面下载文件
  • 原文地址:https://www.cnblogs.com/homle/p/8185571.html
Copyright © 2011-2022 走看看