• Anaconda+django写出第一个web app(六)


    今天学习如何写一个注册用户的界面。

    上一节的导航栏中我们修改了导航栏右侧的文字为register并将路径设置为/register,内容如下:

    <li><a href="/register">Register</a></li>

    为了让我们在点击Register的时候,可以成功跳转到register的页面,我们需要新建一个register.html的文件,内容如下:

    {% extends 'main/header.html' %}
    
    {% block content %}
    <form method="POST">
      {% csrf_token %}
      {{ form }}
    </form>
    
    {% endblock %}

    接下来我们需要修改Views.py,来定义一个register函数:

    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import Tutorial
    from django.contrib.auth.forms import UserCreationForm
    # Create your views here.
    def homepage(request):
        return render(request=request, 
                template_name='main/home.html',
                context={'tutorials':Tutorial.objects.all})
    
    def register(request):
        form = UserCreationForm
        return render(request=request,
                template_name='main/register.html',
                context={'form':form})

    接下来修改main文件夹下的urls.py,来指向这个函数:

    from django.urls import path
    from . import views
    
    app_name = 'main' #此处为了urls的命名空间
    
    urlpatterns = [
        path('', views.homepage, name='homepage'),
        path('register/', views.register, name='register'),
    ]

    现在可以来到主页点击右上角的Register,可以跳转到如下界面:

    我们可以从上图看到,界面显示很糟糕,我们不希望它是左对齐到页面边缘的,这时可以使用container,修改header.html中的如下内容:

      <div class="container">
        {% block content %}
        {% endblock %}
      </div>

    再次刷新页面,可以看到显示好了很多。

    仔细观察可以发现,有些显示比较混乱,比如Password显示的位置很奇怪,我们希望它可以另起一行,这里只需要将header.html中的{{form}}给位{{form.as_p}}即可,此外我们还需要添加一个提交按钮,最终header.html代码和显示效果如下:

    {% extends 'main/header.html' %}
    
    {% block content %}
    <form method="POST">
      {% csrf_token %}
      {{ form.as_p }}
    
      <button class="btn waves-effect waves-light" type="submit" name="action">Submit</button>
    </form>
    
    If you already have an account <a href="/login" target="blank"><strong>login</strong></a> instead.
    {% endblock %}

    现在有了Submit按钮,但是如何让点击之后发生页面跳转呢?我们需要在views.py中进行修改:

    from django.shortcuts import render, redirect
    from django.http import HttpResponse
    from .models import Tutorial
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth import login, logout, authenticate
    # Create your views here.
    def homepage(request):
        return render(request=request, 
                template_name='main/home.html',
                context={'tutorials':Tutorial.objects.all})
    
    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                user = form.save()
                username = form.cleaned_data.get('username')
                login(request, user)
                return redirect('main:homepage')
            else:
                for msg in form.error_messages:
                    print(form.error_messages[msg])
    
                return render(request=request,
                    template_name='main/register.html',
                    context={'form':form})
    
        form = UserCreationForm
        return render(request=request,
                template_name='main/register.html',
                context={'form':form})

    最后,我们就可以输入用户名和密码,点击Submit,就可以看到页面成功跳转到首页。

    参考链接:

    [1] https://pythonprogramming.net/user-registration-django-tutorial/

  • 相关阅读:
    button theme
    Container详解
    flutter控件之ExpansionPanelList
    flutter屏幕适配
    Flutter 获取控件尺寸和位置
    Dart
    异步async、await和Future的使用技巧
    flutter key
    Flutter 控件之 Routes 和 Navigator. [PopupRoute]
    flutter
  • 原文地址:https://www.cnblogs.com/yunxiaofei/p/10423710.html
Copyright © 2020-2023  润新知