Django 编写注册页面

来自CloudWiki
跳转至: 导航搜索

渲染用户信息

views.py:

@login_required
def show_user(request):
    user = WeChatUser.objects.get(user = request.user)
    return render(request,"user.html",{"user":user})

templates/user.html:

Bd20-5-3.png

    <div class="container">
        <div class="row">
            <div class="col-md-2">
                <img src="/static/image/{{ user.pic }}" class="img-responsive img-thumbnail">
            </div>
            <div class="col-md-10">
                <h1 style="font-size:70px">{{ user.user }}</h1>
                <p style="font-size:50px">Email: {{ user.user.email }}</p>
            </div>
        </div>
        <div class="row" style="margin-top:62px">
            <div class="col-md-4">
                <p style="font-size:50px">Region</p>
            </div>
            <div class="col-md-8">
                <p style="font-size:50px;color:gray">{{ user.region }}</p>
            </div>
        </div>


注册用户功能

命令行尝试

[root@localhost wechat]# python3 manage.py shell

Python 3.7.5 (default, Apr 16 2020, 22:32:00)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from moments.models import WeChatUser,User
>>> user = User(username="buzz",email="buz@disney.com")
>>> user.set_password("buzz")
>>> user.save()
#第二种创建数据的方法
>>> WeChatUser.objects.create(user=user)
<WeChatUser: buzz>

admin后台验证

Bd20-5-4.png

编写注册页面

编写view方法

momments/views.py:


from django.http import HttpResponse,JsonResponse

from .models import WeChatUser,Status,User

。。。

def register(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    email = request.POST.get('email')

    try:
        user = User(username=username,email = email)
        user.set_password(password)
        user.save()

        WeChatUser.objects.create(user=user)
    except Exception as err:
        result = False
        message = str(err)
    else:
        result = True
        message = "Register success"

    return JsonResponse({"result":result,"message":message})



配置url

wechat/urls.py:

from django.contrib import admin
from django.urls import path
from moments.views import home
from moments.views import show_user,show_status,submit_post
from moments.views import register
from django.contrib.auth.views import LoginView,LogoutView
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',LoginView.as_view(template_name="homepage.html")),
    path('', home),
    path('user',show_user),
    path('status',show_status),
    path('post',submit_post),
    path('exit',LogoutView.as_view(next_page="/")),
    path('register',register),
]


浏览器输入:http://10.0.0.30:8000/register 验证

{"result": false, "message": "auth_user.username may not be NULL"}

说明地址正确。

前端页面编写

我们先用一个接口测试,然后用实际的ajax编写。

测试POST请求

Windows中编写如下代码,test_post.py

import requests


data ={"username":"nemo2",
       "password":"nemo2",
       "email": "nemo2@disney.com",
       "csrfmiddlewaretoken": "5BN2BQ1XMXbEGbduWQ69iIjQjoERU6Y18PF0HKmneVwwkG4zZIKl4AOlrSCij85m"}
cookies = {
    "csrftoken": "2BxkgM7dB4qhfXDYcKghlohPeps0kLHE5PpimGsD32L9Tsu3fCUt7gMkmTqrJNOZ"
}
r= requests.post("http://10.0.0.30:8000/register",data=data,cookies=cookies)
print(r.text)

运行 test_post.py

{"result": true, "message": "Register success"}

r如果出现 reuslt :false 说明有错


csrfmiidelwaretoken 值 可从这里找:

Bd20-5-5.png

csrftoken值可从这里找.

Bd20-5-6.png

admin后台验证:

确认接口可创建用户:


Bd20-5-7.png

接下来用Ajax 发送:

引用用到的前端库

在 base.html 中将 body 中的两个 script 标签移到 head 中

Bd20-5-8.png

给表单元素添加id

在 homepage.html 的注册<form>中将<button>标签改为<a>标签,并向移掉其 type=”submit”属性。并给它和 <input> 标签添加 id:

Bd20-5-9.png

<form style="background-color:white; margin-top:2vh; padding:2vh 2vh 8vh 2vh">
                    <p style="font-size:16px"><strong>New to WeChat?</strong> Sign up</p>
                    <div class="form-group">                    
                        <input type="text" class="form-control" id="register_username" placeholder="Full name">
                    </div>
                    <div class="form-group">                    
                        <input type="email" class="form-control" id="register_email" placeholder="Email">
                    </div>
                    <div class="form-group">                    
                        <input type="password" class="form-control" id="register_password" placeholder="Password">
                    </div>
                    <a style="float:right" id="register_submit"  class="btn btn-warning">Sign up for WeChat</a>
                </form>

编写ajax代码

在 homepage.html 中添加<script>标签,并添加如下代码:

    <script>
              function register() {
                      $.ajax({
                            url: "/register",
                            type: "post",
                            data: {
                                  "username" : $("#register_username").val(),

                                  "password" : $("#register_password").val(),

                                  "email" : $("#register_email").val(),

                                  "csrfmiddlewaretoken": $("input[name='csrfmiddlewaretoken']").val()
                            },
                            success: function(res){
                                   alert(res["message"]),
                                   location.reload()
                            }
                        })
              }

             $("#register_submit").click(function(){
                console.log ("控制台输出");
                register()
             })

    </script>

测试验证

在注册页面,填写新用户信息,点击提交,

如果成功,会显示如图所示:

Bd20-5-11.png

admin后台查看:

果然新添了一个用户po。

Bd20-5-12.png