Django第4步_理解form表单类与处理html的post、get

news/2024/7/6 0:46:07

表单类

用户登陆框
可以用纯粹的html代码来编写,也可以用django中的forms编写
创建forms.py来写这个表单数据
在这里插入图片描述
在python控制台打印查看login_form,结果就是html代码

在这里插入图片描述
既然这样为什么不直接用html写?
form不会这么无聊,它可以暂存表单数据,充当临时容器
就好像我们用C++进行值交换时候

void exchange(int &x,int &y)
{
	int temp=x;//临时变量temp
	x=y;
	y=temp;
}

类似临时变量temp,form表单就可以充当一个临时容器存储数据
form表单写一个临时存储数据
有个重点
就是我们写html的表单数据提交时在表单添加{%crsf_token%}
cross-site request forgery,跨站请求仿造(因为django内置了一个crsf中间键)
避免前端通过post方式提交数据被django禁止
查看django内置的django.middleware.csrf.CsrfViewMiddleware
在这里插入图片描述
接下来介绍html的变量标签块标签
变量标签{{p.Person_name}}
快标签{% if Persons%}
请看下面的html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模型交易平台首页</title>
</head>
<body>
用户信息:
{% if Persons %}
    <ol>
        {% for p in Persons %}
            <li>
                <p>用户名:{{  p.Person_name }}</p>
                <p>用户金币:{{ p.Person_money }}</p>
                <p>用户账号:{{ p.Person_id }}</p>
            </li>
        {% endfor %}
    </ol>
{% else %}
    No Person.
{% endif %}
</body>

</html>

在这里插入图片描述
简单的测试ok!
接下来写一个form表单数据匹配html的表单标签来进行登录

from django import forms
from .models import *#导入有户模型
#仅仅使用用户名和密码登录,和html的id一致
class LoginForm(forms.Form):
    username=forms.CharField()
    password=forms.CharField(widget=forms.PasswordInput)

ok,接下来在views视图函数写一个查找用户函数Find_Person
存在返回1否则返回0

def Find_Person(P_name,P_pwd):
    Person_name=models.Person.objects.order_by('Person_name')#名字排序
    for p in Person_name:
        print(p.Person_name,p.Person_pwd)
        if p.Person_name==P_name and p.Person_pwd==P_pwd:
            return 1
    return 0

写登录函数

def Person_login(request):
    if request.method =='POST':
        print('post方法')
        P_form=forms.LoginForm(request.POST)#表单数据
        print('表单数据获取成功')
        if P_form.is_valid():#数据是否合法
            print('数据合法')
            cd=P_form.cleaned_data
            P_name=cd['username']
            P_pwd=cd['password']
            print(P_name,P_pwd)
            user=Find_Person(P_name,P_pwd)#对比数据
            if user:
                return HttpResponse("登录成功")
            else:
                return HttpResponse("没有该用户")
        else:
            return HttpResponse("数据不合法")
    else:
        P_form=forms.LoginForm()
        print('不是post方法')
    return render(request,'adminpage/login.html',{'form':P_form})

借用django的登陆界面仿写login.html
还有css这里就不一一展示了,django框架里面都有


<!DOCTYPE html>

<html lang="en-us" >
<head>
<title>Log in | Django site admin</title>
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css">
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css">
    <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <link rel="stylesheet" type="text/css" href="/static/admin/css/responsive.css">
<meta name="robots" content="NONE,NOARCHIVE">
</head>
<body class=" login"
  data-admin-utc-offset="0">
<!-- Container -->
<div id="container">
    <!-- Header -->
    <div id="header">
        <div id="branding">
<h1 id="site-name"><a href="/admin/">模型交易平台用户登录</a></h1>
        </div>
    </div>
    <!-- END Header -->
    <!-- Content -->
    <div id="content" class="colM">
<div id="content-main">
<form action="/demo/login/" method="post" id="login-form"><input type="hidden" name="csrfmiddlewaretoken" value="u7XrpxUTWRgYFbI2hvlKzrb1NCqReMg38ciAfTLuF38EqLK5Xa2JiLWlFNgFozQG">
    {% csrf_token %}
  <div class="form-row">
    <label class="required" for="id_username">用户名:</label> <input type="text" name="username" autofocus required id="id_username">
  </div>
  <div class="form-row">

    <label class="required" for="id_password">密码:</label> <input type="password" name="password" required id="id_password">
    <input type="hidden" name="next" value="/admin/">
  </div>
  <div class="submit-row">
    <label>&nbsp;</label><input type="submit" value="登录">
  </div>
</form>
</div>
        <br class="clear">
    </div>
    <!-- END Content -->
    <div id="footer"></div>
</div>
<!-- END Container -->
</body>
</html>

测试匹配路径urls.py

from django.contrib import admin
from django.urls import path,include
from demo00 import views
urlpatterns = [
    path('',views.index,name='demo'),
    path('login/',views.Person_login,name='Person_longin'),
    path('register/',views.Person_register,name='register'),
]

ok,进入http://127.0.0.1:8000/demo/login/
在这里插入图片描述
点击登录,登录成功
在这里插入图片描述
在这里插入图片描述
ok,没问题!
接下来在forms.py写一个注册用户模型的RegisterForm
这个引用ModelForm
还要注意一个细节因为注册用户时候有些信息没必要填写,需要排除属性可以使用exclude列表
也可以使用fields元组,这里我使用fields元组

#用户注册填写所有信息 ModelForm
class RegisterForm(forms.ModelForm):
    class Meta:
        model=Person#表单数据写入models的Person
        fields=("Person_name","Person_id","Person_image","Person_pwd")#不必在表单中向数据模型的字段赋值,也可用exclude列表
        #意思就是注册用户名、账号、头像、密码这几个数据,其他的默认空

views.py写注册Person函数

def Person_register(request):
    if request.method=='POST':
        print('post方法')
        Person_form=forms.RegisterForm(request.POST)#html数据提交到表单数据
        print(Person_form)
        if Person_form.is_valid():
            print('数据合法')
            new_Person=Person_form.save()#保存到数据库,默认无评论和vip,未充值
            new_Person.save()
            return HttpResponse('注册成功')
        else:
            print('不合法数据')
            return HttpResponse('不能注册')
    else:
        Person_form = forms.RegisterForm()  # html数据提交到表单数据
        print('get方法')
    return render(request,'adminpage/register.html',{'form':Person_form})

运行打印一下,目的是查看它与html对应的标签
在这里插入图片描述
ok,提取出来

<tr><th><label for="id_Person_name">Person name:</label></th><td><input type="text" name="Person_name" maxlength="8" id="id_Person_name"></td></tr>
<tr><th><label for="id_Person_id">Person id:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="Person_id" maxlength="8" required id="id_Person_id"></td></tr>
<tr><th><label for="id_Person_image">Person image:</label></th><td><input type="file" name="Person_image" accept="image/*" id="id_Person_image"></td></tr>
<tr><th><label for="id_password1">Password:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password1" required id="id_password1"></td></tr>
<tr><th><label for="id_password2">Confirm Password:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password2" required id="id_password2"></td></tr>

接下来写到注册的html里面register.html



<!DOCTYPE html>

<html lang="en-us" >
<head>
<title>模型交易平台注册登录</title>
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css">
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css">
    <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <link rel="stylesheet" type="text/css" href="/static/admin/css/responsive.css">
<meta name="robots" content="NONE,NOARCHIVE">
</head>
<body class=" login"
  data-admin-utc-offset="0">
<!-- Container -->
<div id="container">
    <!-- Header -->
    <div id="header">
        <div id="branding">
<h1 id="site-name"><a href="/admin/">模型交易平台用户注册</a></h1>
        </div>
    </div>
    <!-- END Header -->
    <!-- Content -->
    <div id="content" class="colM">
<div id="content-main">
<form action="/demo/register/" method="post" id="login-form"><input type="hidden" name="csrfmiddlewaretoken" value="u7XrpxUTWRgYFbI2hvlKzrb1NCqReMg38ciAfTLuF38EqLK5Xa2JiLWlFNgFozQG">
    {% csrf_token %}
      <div class="form-row">
          <label class="required" for="id_Person_name">Person name:</label><ul class="errorlist">用户名</ul><input type="text" name="Person_name" maxlength="8" id="id_Person_name">
      </div>

    <div class="form-row">
        <label class="required" for="id_Person_id">Person id:</label><ul class="errorlist">账号</ul><input type="text" name="Person_id" maxlength="8" required id="id_Person_id">
    </div>

    <div class="form-row">
    <label class="required" for="id_Person_image">Person image:</label><ul class="errorlist">头像</ul><input type="file" name="Person_image" accept="image/*" id="id_Person_image">
    </div>

    <div class="form-row">
        <label class="required" for="id_Person_pwd">Password:</label><ul class="errorlist"><li>密码</li></ul><input type="password" name="Person_pwd" required id="id_password1">
    </div>

{#    <div class="form-row">#}
{#        <label class="required" for="id_password2">Confirm Password:</label><ul class="errorlist"><li>再次输入密码</li></ul><input type="password" name="password2" required id="id_password2">#}
{#        </div>#}

  <div class="submit-row">
    <label>&nbsp;</label><input type="submit" value="注册">
  </div>
</form>
</div>
        <br class="clear">
    </div>
    <!-- END Content -->
    <div id="footer"></div>
</div>
<!-- END Container -->
</body>
</html>


登录注册
在这里插入图片描述
查看控制台
在这里插入图片描述
注册成功
在这里插入图片描述
登录django后台管理界面查看person
在这里插入图片描述
临时写一个html查看注册信息,ok没bug
在这里插入图片描述
有个问题就是不美观,这个很不好……
下一篇写学习css与js的笔记,peace!!!


http://www.niftyadmin.cn/n/2519816.html

相关文章

Java基础-DBCP连接池(BasicDataSource类)详解

Java基础-DBCP连接池(BasicDataSource类)详解 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程&#xff0c;为了解决此类性能问题&#xff0c;通…

计算机web程序设计考试题,2015年计算机等级考试二级《web程序设计》试题.doc

2015年计算机等级考试二级《web程序设计》试题1、 % Response.Buffer True % % Dim varNumber ’定义一个访问次数变量 varNumber Request.Cookies "Number" ’读取Cookies值 if varNumber "" then varNumber 1??? ’如果是第一次&#xff0c;则令访问次…

Django第5步_理解html继承extends

html的继承 块标签{%extends ‘html网页’%} {% block content%}和{% endblock %} 这里我写一个测试函数test关联test.html def test(request):return render(request,indexpage/test.html)路径就加个test在这里插入代码片 path(test/,views.test,nametest),test.html继承ind…

鸡兔同笼问题计算机算法编程,鸡兔同笼子问题看算法在编程中的重要性,终于明白为何工资低了...

同为程序员为何你工资这么低&#xff1f;为何BAT面试要面算法&#xff1f;中国有80%以上的程序员觉得算法在日常开发中并没有实际用处&#xff0c;殊不知算法只是一种解决问题的思想。而我国大部分程序员都是沉浸在会多少个框架、会多少门编程语言、实现过多少个接口中。在大部…

持续集成(一):maven私服搭建

需求扯淡 新入职一家公司&#xff0c;公司Java技术这块起步比较晚&#xff0c;没有自己成熟的框架&#xff0c;入职后一直忙于基础框架的搭建&#xff0c;框架搭建好后&#xff0c;领导又催着使用新框架重构现有系统&#xff0c;重构工作完成了差不多的时候&#xff0c;领导又让…

计算机ppt听课记录,关于播放幻灯片听课记录范文700字

关于播放幻灯片听课记录范文700字 相关内容:暑假的趣事就像是一朵朵浪花&#xff0c;将永远地珍藏在我的记忆中&#xff0c;400字关于小学暑假里的一件事作文带给大家&#xff0c;希望大家认真阅读。400字关于小学暑假里的一件事作文&#xff1a;做幻灯片暑假&#xff0c;我们全…

pycharm与python无法使用pip问题

问题&#xff1a;python3.7与pyharm里面无法使用 我想要安装个一个myqr的库&#xff0c;结果是这样&#xff0c;当时我的内心是崩溃的。 查了相关博客之后发现其实没有进入pip模块的路径 解决办法 方法1.进入pip 找到python安装路径中的Scripts文件夹 搜索输入里面直接cm…

技术人员如何摆脱移生万物时代的焦虑

2016年是移动互联网与硬件结合最为紧密的一年&#xff0c;这一点大家深有体会。像VR应用已经开始推翻人们在传统游戏、社交、视频、阅读、教育、购物等等方面的体验。这样的例子还有很多。随着移动应用场景的垂直细分和市场创新&#xff0c;也分别从纵、横两个坐标轴影响越来越…