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

上一节的导航栏中我们修改了导航栏右侧的文字为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/

Anaconda+django写出第一个web app(六)的更多相关文章

  1. Anaconda+django写出第一个web app(一)

    在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内. 启动命令行进入此文件夹内,可以先通过如下命令查看一 ...

  2. Anaconda+django写出第一个web app(十一)

    今天我们来学习给页面添加一个Sidebar,根据Sidebar跳转到相应的tutorial. 打开views.py,编辑single_slug函数: def single_slug(request, ...

  3. Anaconda+django写出第一个web app(十)

    今天继续学习外键的使用. 当我们有了category.series和很多tutorials时,我们查看某个tutorial,可能需要这样的路径http://127.0.0.1:8000/categor ...

  4. Anaconda+django写出第一个web app(九)

    今天来学习外键的使用,用外键来连接数据库中的两个表. 当我们的tutorials非常多的时候,目前的显示方式就会使得页面非常凌乱.我们可以考虑把这些教程分为不同的系列,页面只显示标题以及概要等信息,进 ...

  5. Anaconda+django写出第一个web app(三)

    前面我们已经建立了模型Tutorial,也已经可以用Navicat Premium打开数据看查看数据,接下来我们通过建立admin账户来上传数据. 在命令行执行如下命令来创建用户: python ma ...

  6. Anaconda+django写出第一个web app(二)

    今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题.内容和发 ...

  7. Anaconda+django写出第一个web app(七)

    今天来实现如何在页面弹出一些信息,比如注册成功后弹出注册成功的信息.这一点可以通过materialize里的Toasts来实现. django自带的messages可以告诉我们是否注册成功,以及注册失 ...

  8. Anaconda+django写出第一个web app(四)

    前面对Models有了一些了解,今天开始进一步了解Views,了解Views如何和Models交互以及了解模板(templates). 打开main文件夹下的views.py,重新编写homepage ...

  9. Anaconda+django写出第一个web app(八)

    今天来实现网站的登入和登出功能. 首先我们需要在urls.py中添加路径,注意此处的路径和在导航栏中设置的文字路径保持一致: from django.urls import path from . i ...

随机推荐

  1. 腾讯 深圳 25928-PHP开发工程师(深圳)

    工作地点:深圳 职位类别:技术类 招聘人数:1人 工作职责: 负责游戏研运体系流程工具及相关产品的开发.维护: 参与支撑系统的需求分析.设计.编码: 承担外包开发成员技术导师,解决技术难点,把控开发质 ...

  2. 【Beta阶段】启程会议——第零次Scrum Meeting!

    本次会议为Beta阶段功能的概括性介绍与任务主线的确定会议. 本次会议拟确定第二阶段各位队员的内容与主要职责 会议时长:1小时30分(因为是启程会议,所以说的比较多) 会议地点:7公寓1楼会客室   ...

  3. git的使用与学习

    1.将本地项目推送到Github $ git remote add origin 仓库地址 // 关联远程仓库 $ git push origin master // 推送到远程仓库 如果远程仓库有本 ...

  4. 基于SSH框架的学生选课质量属性分析

    系统:学生选课系统 框架:SSH(Struts2+Spring+Hibernate) 我做的是基于SSH框架的学生选课系统.学生选课系统的特性:①系统响应时间短,能够快速调出课程数据供学生选课提交.② ...

  5. Sprint 1 Review & Daily Scrum - 11/18

    今天我们组利用课后的时间对Sprint 1阶段进行了回顾,并对接下来的工作进行了安排. Sprint 1阶段我们开始定的计划是完成最基础的背单词功能,可以让用户可以完整地走一遍背单词流程.回顾上周,我 ...

  6. DirectoryEntry_Properties属性的遍历(win2003)

    DirectoryEntry root = new DirectoryEntry(@"IIS://localhost/W3SVC"); string PInfo = "& ...

  7. createobjbyreplace(str,arr) js替换方法保存

    <script> function createobjbyreplace(str,arr){ var len = arr.length; for(var i=0; i<len; i+ ...

  8. [转帖]2019 简易Web开发指南

    2019 简易Web开发指南     2019年即将到来,各位同学2018年辛苦了. 不管大家2018年过的怎么样,2019年还是要继续加油的! 在此我整理了个人认为在2019仍是或者将成为主流的技术 ...

  9. Python模块-pymssql

    目录 工作原理 常用封装 Python默认的数据库是 SQLlite,不过它对MySql以及SQL server的支持也可以.如果想链接操作SQL server,需使用第三方包pymssql pyms ...

  10. 清华集训2015-Day 1

    玛里苟斯 一个大小为 \(n\) 的可重集合 \(a\) ,求 \(\mathbb E[x^k]\) ,其中 \(x\) 为 \(a\) 的一个子集的异或和. \(n\le 10^5,1\le k\l ...