首页 > 技术文章 > django用户注册

onlyhold 2017-12-17 11:09 原文

1、引用静态文件:在html页面引入{% load staticfiles %}  ,然后在静态文件路径加上href="{% static 'css/reset.css' %}"即可,static会自动到我们的setting.py文件中找到我们设置的STATIC_URL = '/static/',也就是static会自动在静态路径的前面加上static

 

2、注册表单 form验证:

class RegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField(error_messages={'invalid':u'验证码错误'})

在user app的view中编写注册view:RegisterView
from django.contrib.auth.hashers import make_password
class RegisterView(View):

def get(self,request):
registerform = RegisterForm()
return render(request, "register.html", {'registerform':registerform})

def post(self,request):
registerform = RegisterForm(request.POST)
if registerform.is_valid(): #注册流程
user_name = request.POST.get('email', '')
pass_word = request.POST.get('password', '')
user_profile = UserProfile()
user_profile.username = user_name
user_profile.email = user_name
user_profile.password = make_password(pass_word)
user_profile.is_active = False
user_profile.save()
send_email(user_name, 'register')
return render(request, "login.html")
else:
return render(request, "register.html", {'registerform':registerform})

在APPS当中新建一个util文件夹,然后在里面定义一个发送邮件的函数,因为在其他地方可能也会用到:
from random import Random
from django.core.mail import send_mail
from guetonline.settings import EMAIL_FROM
def random_str(randomlength=8):    #生成随机字符串函数,也就是验证码
str = ''
chars = 'AaBbCcDdEeFeGgHhIiJjKkMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars)-1
random = Random()
for i in range(randomlength):
str+=chars[random.randint(0, length)]
return str
def send_email(email,send_type='register'):
email_record = EmailVerifyRecord()
myrandom_str =random_str(16)
email_record.code = myrandom_str
email_record.email = email
email_record.send_type =send_type
email_record.save()

email_title = ''
email_body = ''

if send_type == 'register':
email_title = 'guet在线学习系统注册激活连接'
email_body = '请点击下面的连接激活你的账号:http://127.0.0.1:8000/active/{0}'.format(myrandom_str)
send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) #Python的发送邮件函数
if send_status:
pass
setting.py配置发送Email的配置:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '要登录的邮箱用户'
EMAIL_PASSWORD = '登录的邮箱密码'
EMAIL_USER_SSL = False
EMAIL_FROM = '邮箱用户'



html页面:
<div class="tab-form">
<form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off">
<input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />
<div class="form-group marb20 {% if registerform.errors.eamil %} errorput {% endif %}">
<label>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱</label>
<input type="text" id="id_email" name="email" value="{{ registerform.email.value }}" placeholder="请输入您的邮箱地址" />
</div>
<div class="form-group marb8 {% if registerform.errors.password %} errorput {% endif %} ">
<label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
<input type="password" id="id_password" name="password" value="{{ registerform.password.value }}" placeholder="请输入6-20位非中文字符密码" />
</div>
<div class="form-group marb8 captcha1 {% if registerform.errors.captcha %} errorput {% endif %} ">
<label>验&nbsp;证&nbsp;码</label>
{{ registerform.captcha }}
</div>
<div class="error btns" id="jsEmailTips">{% for key,error in registerform.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
<div class="auto-box marb8">
</div>
<input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
<input type='hidden' name='csrfmiddlewaretoken' value='5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy' />
{% csrf_token %}
</form>
</div>

推荐阅读