前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python Django个人网站搭建9-对用户注册和删除的实现

Python Django个人网站搭建9-对用户注册和删除的实现

作者头像
zifan
发布于 2021-12-14 04:29:31
发布于 2021-12-14 04:29:31
99700
代码可运行
举报
运行总次数:0
代码可运行

作者: zifanwang  发布于2020-05-15

1. 用户的注册

首先在userprofile/views.py中增加用户注册函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from userprofile.froms import UserLoginForm,UserRegisterForm
def user_register(request):
   if request.method == 'POST':
       user_register_form = UserRegisterForm(data=request.POST)
       if user_register_form.is_valid():
           new_user = user_register_form.save(commit=False)
           # 设置密码
           new_user.set_password(user_register_form.cleaned_data['password'])
           new_user.save()
           # 保存好数据后立即登录并返回博客列表页面
           login(request, new_user)
           return redirect("article:article_list")
       else:
           return HttpResponse("注册表单输入有误。请重新输入~")
   elif request.method == 'GET':
       user_register_form = UserRegisterForm()
       context = { 'form': user_register_form }
       return render(request, 'userprofile/register.html', context)
   else:
       return HttpResponse("请使用GET或POST请求数据")

再在userprofile/froms.py增加 UserRegisterForm:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UserRegisterForm(forms.ModelForm):
    # 复写 User 的密码
    password = forms.CharField()
    password2 = forms.CharField()
    class Meta:
        model = User
        fields = ('username', 'email', 'password')
    def clean_password2(self):
        data = self.cleaned_data
        if data.get('password') == data.get('password2'):
            return data.get('password')
        else:
            raise forms.ValidationError("密码输入不一致,请重试。")

接下来编写模板和 urls.py 新建templates/userprofile/register.html并输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% extends "base.html" %}
{% load static %}
{% block title %}
   register
{% endblock title %}
{% block content %}
   <div class="container">
       <div class="row">
           <div class="col-12">
               <br>
           <form method="post" action=".">
               {% csrf_token %}
               <div class="form-group col-md-4">
                   <label for="username">Username</label>
                   <input type="text" class="form-control" id="username" name="username" required>
               </div>
               <div class="form-group col-md-4">
                   <label for="email">Email</label>
                   <input type="text" class="form-control" id="email" name="email">
               </div>
               <div class="form-group col-md-4">
                   <label for="password">Password</label>
                   <input type="password" class="form-control" id="password" name="password" required>
               </div>
               <div class="form-group col-md-4">
                   <label for="password2">Password again</label>
                   <input type="password" class="form-control" id="password2" name="password2" required>
               </div>
               <button type="submit" class="btn btn-primary">submit</button>
           </form>
{#                #}
           </div>
       </div>
   </div>
{% endblock content %}

接下来在登陆界面中增加注册入口 编写login.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% extends "base.html" %}
{% load static %}
{% block title %}
   Login
{% endblock title %}
{% block content %}
   <div class="container">
       <div class="row">
           <div class="col-12">
               <br>
               <form method="post" action=".">
                   {% csrf_token %}
                   <div class="form-group">
                       <label for="username">Username</label>
                       <input type="text" class="form-control" id="username" name="username">
                   </div>
                   <div class="form-group">
                       <label for="password">Password</label>
                       <input type="password" class="form-control" id="password" name="password">
                   </div>
                   <button type="submit" class="btn btn-primary">Login</button>
               </form>
               <h5>No account yet?</h5>
               <h5>Click <a href='{% url "userprofile:register" %}'>here</a> to register.</h5>
               <br>
           </div>
       </div>
   </div>
{% endblock content %}

最后在userprofile/urls.py中新增注册路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path('register/', views.user_register, name="register"),

然后我们启动重启服务器(python manage.py runserver)打开登陆界面http://127.0.0.1:8000/userprofile/login/

点击here

接着填写注册信息 点击提交后就可以看见成功注册并且自动登陆了。

2. 用户的删除

编写userprofile/views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib.auth.models import User
# 引入验证登录的装饰器
from django.contrib.auth.decorators import login_required
...
@login_required(login_url='/userprofile/login/')
def user_delete(request, id):
    user = User.objects.get(id=id)
    if request.user == user:
        logout(request)
        user.delete()
        return redirect("article:article_list")
    else:
        return HttpResponse("你没有删除操作的权限。")

@login_required是一个装饰器,就是 @login_required要求调用user_delete()函数时,用户必须登陆如果不登陆则不执行函数并且将重定向到 /userprofile/login/地址去。 然后改写templates/header.html,新增删除用户入口,并且添加弹窗组件的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<head>
    {% if user.is_authenticated %}
        <script>
            function user_delete() {
                var r=confirm("Wanna delete this user?");
                if (r==true)
                {
                    window.location='{% url "userprofile:delete" user.id %}';
                }
            }
        </script>
    {% endif %}
</head>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
 <div class="container">
   <a class="navbar-brand" href="#">My Site</a>
   <div>
     <ul class="navbar-nav">
       <li class="nav-item">
         <a class="nav-link" href="{% url 'article:article_list' %}">Article</a>
       </li>
         <li class="nav-item">
             <a class="nav-link" href="{% url 'article:article_create' %}">New</a>
         </li>
         {% if user.is_authenticated %}
           <li class="nav-item dropdown">
               <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                 {{ user.username }}
               </a>
               <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                 <a class="dropdown-item" href="{% url "userprofile:logout" %}">Exit</a>
         <a class="dropdown-item" href="#" onclick="user_delete()">Delete</a>
               </div>
           </li>
           {% else %}
               <li class="nav-item">
                   <a class="nav-link" href="{% url 'userprofile:login' %}">Login</a>
               </li>
         {% endif %}
     </ul>
   </div>
 </div>
</nav>

最后修改userprofile/urls.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path('delete/<int:id>/', views.user_delete, name='delete'),

看一下效果:

点击删除用户(注意请新注册一个用户并删除它,不要删除root)就可以删除用户了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Selenium自动化测试-4.By定位及如何确定元素唯一
(1)有时候我们不知道用哪种方法来定位元素,By定位可以根据实际场景设定定位策略。
可可的测试小栈
2019/10/17
1K0
《手把手教你》系列基础篇之3-python+ selenium自动化测试-驱动浏览器和元素定位大法
上一篇中,只是简单地一带而过的说了一些驱动浏览器,这一篇继续说说驱动浏览器,然后再说一说元素定位的方法。
北京-宏哥
2021/07/20
1.1K0
Selenium自动化测试-3.元素定位(3)
css定位是通过css选择器进行定位,我们需要了解css选择器的一些知识才能进行css定位,选择器基本语法如下:
可可的测试小栈
2019/10/17
3800
Selenium自动化测试-3.元素定位(3)
在上一篇:Selenium自动化测试-元素定位(2),我们介绍了xpath定位,xpath一般都能满足我们的定位需求。今天我们来介绍另一种——css定位神器。css相对xpath来说,语法更简洁、定位速度更快,xpath能定位到的,css一般也能定位到,可以说是神通广大的一员虎将。
王大力测试进阶之路
2020/03/11
4140
Selenium自动化测试-3.元素定位(3)
Selenium自动化测试-3.元素定位(2)
有时候我们发现网站并没有id、name等属性。那么,我们可以用更高级的定位方法——xpath来定位元素。
可可的测试小栈
2019/10/17
8740
python-selenum3 第五天定
使用tag来定位 tag定位的是标签,不常用 例如:百度的输入框标签是input 最终会报错,因为百度首页input标签太多了
py3study
2020/01/10
3970
python-selenum3 第五天定
​Java自动化测试 (元素定位 23)
使用脚本断点调试定位是否正确是一个方法,当时在我的实际工作中,元素定位代码的封装较深,所以修改查询元素的内容较麻烦,所以直接使用Xpath Helper可以方便的进行开发前的测试。不管是爬虫爬去页面内容还是自动化测试都很实用。
zx钟
2020/09/04
1.1K0
​Java自动化测试 (元素定位 23)
python---定位元素
(1)id定位 :id属性在html文档中是唯一的 find_element_by_id()方法通过id属性定位元素 (2)name定位 find_element_by_name()方法 (3)class定位 find_element_by_class_name()方法 (4)tag定位:tag往往用来定义一类功能,通过tag识别某个元素的概率很低 find_element_by_tag_name()方法 (5)link定位:用来定位文本链接。
py3study
2020/01/13
8420
web自动化捕捉元素基本方法
前言:前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。
测试小兵
2019/11/20
1.9K0
web自动化捕捉元素基本方法
🔥《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)
  俗话说:磨刀不误砍柴工,因此在我们要开始写自动化脚本之前,我们先来学习和了解几个基本概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本。
北京-宏哥
2022/02/11
1.2K0
🔥《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)
Selenium之页面元素定位
HTML页面规定了id属性在HTML文档中必须是唯一的(页面id不唯一时,在编辑器中会标红显示,但是页面依然能正常加载)。id定位方法就是通过元素的id属性来查找元素,比如通过id定位百度输入框:
小博测试成长之路
2021/03/08
3.5K0
Selenium之页面元素定位
自动化-Selenium 3-元素定位(Python版)
2.XPath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,那还是选择XPath或cssSelector。
wangmcn
2022/07/22
7.7K0
自动化-Selenium 3-元素定位(Python版)
python+selenium实现Web自动化
最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新!
conanma
2021/09/07
3.6K0
全网最全关于selenium webdriver 8大元素定位详解
元素的定位应该是自动化测试的核心,想要操作一个元素,首先应该识别这个元素。Webdriver提供了一系列的元素定位方法。
全栈程序员站长
2022/06/29
1.9K0
全网最全关于selenium webdriver 8大元素定位详解
python-selenum3 第四天定
如果把写用例当做是手工测试,那么UI级自动化就是将手工测试变成计算器自动执行的测试
py3study
2020/01/03
4740
python-selenum3 第四天定
Selenium元素定位
find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_tag_name() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_xpath() find_element_by_css_selector() 在这里将对各种元素定位方式统一使用百度首页进行示例,详细操作步骤有以下内容: 1.打开浏览器,进入百度首页(www.baidu.com); 2.百度页面输入关键字 www.testclass.cn 进行搜索; 3.关闭浏览器; 首先,通过前端工具(火狐浏览器的Firebug)或者直接按F12进入开发者模式查看具体前端代码:
Altumn
2019/10/21
1.2K0
Selenium元素定位
Python Selenium库的使用「建议收藏」
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
全栈程序员站长
2022/07/29
4.4K0
Python Selenium库的使用「建议收藏」
java获取百度网页内容
RestTemplate是Spring提供的用于访问RESTful服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。RestTemplate默认依赖JDK提供http连接的能力 (HttpURLConnection),也可以通过替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP 客户 端,OkHttp的性能优越,本博客使用OkHttp,官网, github。
许喜朝
2021/01/27
1.3K0
java获取百度网页内容
selenium实现浏览器自动化
利用自动化在百度搜索需要的信息就需要学习一下基本的操控元素的方法,根据HTML的Id获取元素,获取百度的input输入框id
是小张啊喂
2022/08/18
4450
Selenium+Python系列(二) - 元素定位那些事
这部分内容可以说是重中之重了,也是大部分写web自动化的同学,必会入门技能之一了。
软件测试君
2022/12/05
8370
Selenium+Python系列(二) - 元素定位那些事
推荐阅读
相关推荐
Selenium自动化测试-4.By定位及如何确定元素唯一
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档