1. 程式人生 > >python之--學習模型類view,註冊類

python之--學習模型類view,註冊類

首先要用到包from 

from django.views.generic import View   #模型類

views.py內容

# 使用者註冊類
class RegisterView(View):
    '''註冊'''
    def get(self, request):
        '''顯示註冊頁面'''
        return render(request, 'register.html')

    def post(self, request):
        '''進行註冊處理'''
        # 接收資料
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 進行資料校驗
        if not all([username, password, email]):
            # 資料不完整
            return render(request, 'register.html', {'errmsg': '資料不完整'})

        # 校驗郵箱
        if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return render(request, 'register.html', {'errmsg': '郵箱格式不正確'})

        if allow != 'on':
            return render(request, 'register.html', {'errmsg': '請同意協議'})

        # 校驗使用者名稱是否重複
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 使用者名稱不存在
            user = None

        if user:
            # 使用者名稱已存在
            return render(request, 'register.html', {'errmsg': '使用者名稱已存在'})

        # 進行業務處理: 進行使用者註冊
        user = User.objects.create_user(username, email, password)
        user.is_active = 0
        user.save()

        # 傳送啟用郵件,包含啟用連結: http://127.0.0.1:8000/user/active/3
        # 啟用連結中需要包含使用者的身份資訊, 並且要把身份資訊進行加密

        # 加密使用者的身份資訊,生成啟用token
        serializer = Serializer(settings.SECRET_KEY, 3600)
        info = {'confirm': user.id}
        # info = {'confirm':1}
        token = serializer.dumps(info) # bytes
        token = token.decode()

        # 發郵件
        send_register_active_email.delay(email, username, token)
        # , html_message = html_message
        # 返回應答, 跳轉到首頁
        return redirect(reverse('goods:index'))

 myapp.urls.py

# url(r'^register$', views.register, name='register'), # 註冊
# url(r'^register_handle$', views.register_handle, name='register_handle'), # 註冊處理

url(r'^register$', RegisterView.as_view(), name='register'), # 註冊
url(r'^active/(?P<token>.*)$', ActiveView.as_view(), name='active'), # 使用者啟用
url(r'^login$', LoginView.as_view(), name='login'), # 登入

和上面註冊的函式用法一樣,類名加上as_view(),可以替代單個函式