这篇主要把自己在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控制是否使用响应的加密链接。