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

今天来实现网站的登入和登出功能。

首先我们需要在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‘),
    path(‘logout/‘, views.logout_request, name=‘logout_request‘),
    path(‘login/‘, views.login_request, name=‘login_request‘),
]

在view.py中添加登出和登入的函数,登出的函数非常简单,只需要使用logout函数登出并给出登出成功的信息,然后导向主页即可。登入函数需要使用新的表单AuthenticationForm,并判断用户是否存在,如果存在则登入并进入主页,如果不存在则给出错误信息:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Tutorial
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
# 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‘)
            messages.success(request, f"New account created: {username}")
            login(request, user)
            return redirect(‘main:homepage‘)
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}:{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})

def logout_request(request):
    logout(request)
    messages.info(request, f"Logged out successfully!")
    return redirect(‘main:homepage‘)

def login_request(request):
    if request.method == ‘POST‘:
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get(‘username‘)
            password = form.cleaned_data.get(‘password‘)
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, f"You are now logged in as {username}")
                return redirect(‘main:homepage‘)
            else:
                messages.error(request, f"Invalid username or passowrd.")
        else:
            messages.error(request, f"Invalid username or passowrd.")

    form = AuthenticationForm
    return render(request=request,
            template_name=‘main/login.html‘,
            context={‘form‘:form})

登入登出及信息显示如下,第二幅图显示“You are now logged in as xiaohonghong”,这个就是toast的效果:

与之前的几节不同,我在这里修改了导航栏的颜色,并添加了container效果,修改方法如下,通过style设置背景颜色,将container加入到div的class中:

  <nav style="background-color: #008E72">
    <div class="nav-wrapper container">

现在使用的注册表单是materialize默认的,我们希望注册的时候可以加入邮箱这个选项,这样忘记密码的时候就可以通过邮箱来找回密码,如何自定义注册表单呢?方法如下,在main文件夹下新建forms.py:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class NewUserForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")

    def save(self, commit=True):
        user = super(NewUserForm, self).save(commit=False)
        user.email = self.cleaned_data.get(‘email‘)
        if commit:
            user.save()
        return user

然后将views.py中的UserCreationForm修改为NewUserForm即可,在浏览器点击Register得到如下界面,可以看到email这一样出现了:

参考链接:

[1] https://pythonprogramming.net/user-login-logout-django-tutorial/?completed=/messages-django-tutorial/

原文地址:https://www.cnblogs.com/yunxiaofei/p/10424834.html

时间: 2024-08-06 16:13:22

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

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

在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内. 启动命令行进入此文件夹内,可以先通过如下命令查看一下自己的python版本和django版本. python --version  django-admin --version 我的python和django版本分别是3.7.0和2.1.5 使用如下命令创建第一个项目,命名为mysite. django-admin startproject mys

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

今天继续学习外键的使用. 当我们有了category.series和很多tutorials时,我们查看某个tutorial,可能需要这样的路径http://127.0.0.1:8000/category/series/tutorial,这样看上去十分的繁琐,我们希望无论是在category下还是在series.tutorials下,都只有一级路径. 那么如何做呢?首先在views.py中,我们定义一个single_slug函数: def single_slug(request, single_s

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

前面我们已经建立了模型Tutorial,也已经可以用Navicat Premium打开数据看查看数据,接下来我们通过建立admin账户来上传数据. 在命令行执行如下命令来创建用户: python manage.py createsuperuser 然后输入相应的用户名.邮箱和密码,邮箱可随意填写,接下来执行 python manage.py runserver ,在浏览器输入 http://127.0.0.1:8000/admin/看到下图,输入刚才创建的用户名和密码: 我们可以在User中看到

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

今天开始学习网页风格和设计,就像python有Web框架一样,也有一些CSS框架.对于CSS框架,我们可以使用默认的样式,也可以在原基础上编辑修改.本教程使用的是materialize这个CSS框架[1],首页界面如下: 点解GET STARTED,我们可以把它下载到本地使用,也可以直接复制相应的链接使用. 为了套用如下这个Cards界面,我们直接将代码复制到home.html: 修改后的home.html内容如下: {% load static %} <!-- Compiled and min

如何设计和实现一个web app

web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开发一上来需要安装一堆东西,android开发也差不多,另外web app的学习成本要比平台客户端开发要低些,至少你不用去招聘ios和android程序员.只要具备基础web开发能力的人都可以比较快上手. 2. 部署方便,在很多情况下,部署一个单页web app只需要一个index.html页面文件作

【2】依照Django官网,创建一个web app

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

【3】依照django官网:创建一个web app

1 Creating an admin user $ python manage.py createsuperuser UserName: wuwh Password:   ganbare 2  Start the development server? $ python manage.py runserver 8088 visit :http://127.0.0.1:8000/admin/ 3 .Make the poll app modifiable in the admin from dj

【1】依照Django官网,编写一个web app

1. Creating a project From the command line, cd into a directory where you'd like to store your code, then run the following command: $ django-admin startproject mysite Let's look at what startproject created: mysite/ manage.py mysite/ __init__.py se