1、forms模块
将Models和Forms结合到一起使用,将Forms中的类和Models中的类关联到一起,实现属性的共享
1、在forms.py中创建class,继承自forms.ModelForm
2、创建内部类:Meta,关联Form和Model

属性:
1、model:指定要关联的Model类
2、fields:指定从Model中取哪些字段生成控件
1、取值 "__all__",全部的属性都要生成控件
2、取值 列表或元组,声明允许生成控件的属性名称
3、labels:每个属性所关联的label,取值为字典
labels = {
"属性名1","文本1",
"属性名2","文本2"
}

url:

 urlpatterns = [
url(r'^01_request/$',request_views),
url(r'^02_meta/$',meta_views),
url(r'^03_form/$',form_views),
url(r'^04_get_post/$',get_post_views),
url(r'^05_remark/$',remark_views), url(r'^register/$',register_views),
url(r'^login/$',login_views),
url(r'^login_auto/$',login_auto_views), url(r'01_login',login_form_views),
url(r'01_regiter',regiter_form_views),
]

models.py

 from django.db import models

 class Users(models.Model):
uname = models.CharField(max_length=30)
upwd = models.CharField(max_length=30)
uage = models.IntegerField()
uemail = models.EmailField() def __str__(self):
return self.uname

views.py:

 from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_protect def request_views(request):
# request,类型就是HttpRequest
# request 封装的是与所有请求相关的内容
# print(dir(request)) scheme = request.scheme #请求方案(协议)
body = request.body #请求主体
path = request.path #请求路径
host = request.get_host() #请求主机地址 / 域名
method = request.method #请求方法
get = request.GET #get的请求数据
post = request.POST #get的请求数据
cookies = request.COOKIES #cookie中的数据
meta = request.META #请求中的元数据
return render(request,"01_request.html",locals()) def meta_views(request):
print(request.META["HTTP_REFERER"])
return HttpResponse("request ok") def form_views(request):
return render(request,"03_form.html") @csrf_protect
def get_post_views(request):
if request.method == "GET":
name = request.GET.get("uname")
pwd = request.GET.get("upwd")
return HttpResponse("用户名:"+name+",用户密码:"+pwd)
else:
name = request.POST["uname"]
pwd = request.POST["upwd"]
return HttpResponse ("用户名:" + name + ",用户密码:" + pwd) from .forms import *
def remark_views(request):
if request.method == "POST":
subject = request.POST["subject"]
return HttpResponse(subject)
form = RemarkForm()
return render(request,"05_remark.html",locals()) from .form import *
def login_views(request):
if request.method == "GET":
forms = LoginForm()
return render(request,"login.html",locals())
else:
uname = request.POST["uname"]
upwd = request.POST["upwd"]
user = Users.objects.get(uname=uname)
if user:
if user.upwd == upwd:
return HttpResponse("验证通过")
else:
errmsg = "密码"
return render (request, "login.html", locals ())
else:
errmsg = "用户名错误"
return render(request,"login.html",locals()) def login_auto_views(request):
if request.method == "GET":
form = LoginForm()
return render(request,"login.html",locals())
else:
form = LoginForm(request.POST)
if form.is_valid():
data = form.cleaned_data
print(data)
uname = data["uname"]
print(uname)
upwd = data["upwd"]
user = Users.objects.filter(uname=uname).first()
if user:
if user.upwd == upwd:
return HttpResponse("验证通过")
else:
errmsg = "密码错误"
return render (request,"login.html",locals())
else:
errmsg = "用户名错误"
return render(request,"login.html",locals())
return HttpResponse("信息错误") def register_views(request):
if request.method == "GET":
forms = RegisterForm()
return render(request,"register.html",locals())
else:
form = RegisterForm(request.POST)
if form.is_valid():
data = form.cleaned_data
uname = data["uname"]
upwd = data["upwd"]
uage = data["uage"]
uemail = data["uemail"]
user = Users.objects.filter(uname=uname).first()
if user:
errmsg = "用户名已存在"
return render(request, "register.html", locals())
else:
user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
user.save () Users(**data).save()
return HttpResponse("注册成功") def login_form_views(request):
if request.method == "GET":
form = UserLoginForm()
return render(request,"login_form.html",locals())
else:
uname = request.POST["uname"]
upwd = request.POST["upwd"]
user = Users.objects.get(uname=uname)
if user:
if user.upwd == upwd:
return HttpResponse("验证通过")
else:
errmsg = "密码"
return render (request, "login.html", locals ())
else:
errmsg = "用户名错误"
return render(request,"login.html",locals()) def regiter_form_views(request):
if request.method == "GET":
form = UserRegisterForm()
return render(request,"register_form.html",locals())
else:
form = RegisterForm(request.POST)
if form.is_valid():
data = form.cleaned_data
uname = data["uname"]
upwd = data["upwd"]
uage = data["uage"]
uemail = data["uemail"]
user = Users.objects.filter(uname=uname).first()
if user:
errmsg = "用户名已存在"
return render(request, "register.html", locals())
else:
user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
user.save () Users(**data).save()
return HttpResponse("注册成功")

forms.py

 from django import forms

 # 表示评论内容表单控件
# 评论标题 文本框
# 评论人邮件 type='Email'
# 题目 Select
# isSave type="checkbox"
class RemarkForm(forms.Form):
subject = forms.CharField(label="标题")
email = forms.EmailField(label="邮箱")
message = forms.CharField(label="内容",widget=forms.Textarea)
topic_choice = (
("","好评"),
("","中评"),
("","差评")
)
topic = forms.ChoiceField(label="评价",choices=topic_choice)
issave = forms.BooleanField(label="是否保存")

form.py

 from django import forms

 class LoginForm(forms.Form):
uname = forms.CharField(label="用户名:")
upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput) class RegisterForm(forms.Form):
uname = forms.CharField(label="用户名称:",max_length=18)
upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput)
uage = forms.IntegerField(label="用户年龄:")
uemail = forms.EmailField(label="用户邮件:") from .models import *
# 创建class表示登录的表单,要关联Users实体类
class UserLoginForm(forms.ModelForm):
# 创建内部类Meta,关联Model
class Meta:
# 1、指定关联的Model
model = Users
# 2、指定要生成的控件
fields = ["uname","upwd"]
# 3、指定每个控件对应的label
labels = {
"uname":"用户名称",
"upwd":"用户密码"
}
class UserRegisterForm(forms.ModelForm):
# 创建内部类Meta,关联Model
class Meta:
# 1、指定关联的Model
model = Users
# 2、指定要生成的控件
fields = "__all__"
# 3、指定每个控件对应的label
labels = {
"uname":"用户名称",
"upwd":"用户密码",
"uage":"用户年龄",
"uemail":"用户邮箱"
}

login.html:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<p>{{ errmsg }}</p>
<form action="/login/" method="post">
{% csrf_token %}
{% for form in forms %}
<p>{{ form.label }}{{ form }}</p>
{% endfor %}
<p><input type="submit" value="登录"></p>
</form> ==========================================================
<p>{{ errmsg }}</p>
<form action="/login_auto/" method="post">
{% csrf_token %}
{% for form in forms %}
<p>{{ form.label }}{{ form }}</p>
{% endfor %}
<p><input type="submit" value="登录"></p>
</form>
</body>
</html>

register.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<p>{{ errmsg }}</p>
<form action="/register/" method="post">
{% csrf_token %}
{% for form in forms %}
<p>{{ form.label }}{{ form }}</p>
{% endfor %}
<p><input type="submit" value="注册"></p>
</form>
</body>
</html>

login_form.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>{{ errmsg }}</p>
<form action="/01_login/" method="post">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="登录"></p>
</form> </body>
</html>

register_form.html:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>{{ errmsg }}</p>
<form action="/01_regiter/" method="post">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="登录"></p>
</form> </body>
</html>

Django中用 form 实现登录注册的更多相关文章

  1. Django基于Form之登录和注册

    1.创建Forms文件,内容略多,大家将就着看,不懂请留言 #!/usr/bin/env python # -*- coding: utf8 -*- #__Author: "Skiler H ...

  2. Django基于form组件实现注册校验

    一 基本流程 1 创建form组件对应的类,比如LoginForm 2 前端的三种渲染方式: 渲染方式三种: 1 <form action="" novalidate met ...

  3. 搭建自己的博客(二十一):通过django表单实现登录注册

    1.变化的部分

  4. python利用django实现简单的登录和注册,并利用session实现了链接数据库

    利用session实现与数据库链接,登录模块(在views.py) def login(request): # return HttpResponseRedirect('/') # 判断是否post方 ...

  5. django项目一 登录注册

    STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...

  6. django 登录注册注销

    一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...

  7. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  8. Django+pycharm+mysql 实现用户登录/注册(Django五)

    首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...

  9. Django实现用户登录注册

    本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...

随机推荐

  1. TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了

    2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...

  2. Jdbc连接数据库基本步骤详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Jdbc连接数据库的基本步骤,供大家参考,具体内容如下 package demo.jdbc; import java.s ...

  3. 移动web开发之像素和DPR详解

    前话: 像素在web开发中几乎天天用到,但到底什么是像素,移动端和桌面端的像素有区别吗,缩放对像素有影响吗,视网膜屏幕和像素有什么关系?关于这些问题,可能就不清楚了.本文将介绍关于像素的相关知识 什么 ...

  4. Introduction of Generator in Python

    Python中生成器的原理与使用详解 原创牛大财有大才 发布于2018-09-05 14:36:38 0.range() 函数,其功能是创建一个整数列表,一般用在 for 循环中 语法格式:range ...

  5. handy源码阅读(五):PollerBase类

    使用poll内核函数等待事件发生: struct PollerBase: private noncopyable { int64_t id_; int lastActive_; PollerBase( ...

  6. SVN 没有弹出输入账号和密的界面

    在用TortoiseSVN的时候,点SVN Checkout输入URL之后没有提示要输入账号密码的弹出框,直接跳到下一个界面,解决办法: 因为你在初次登陆svn的时候,点了保存密码的复选框,所以只要清 ...

  7. RabbitMQ 工作图解

    (转网上的图) (原文地址 ,http://www.cnblogs.com/knowledgesea/p/5296008.html)

  8. #1126-JSP HTTP状态码

    JSP HTTP状态码 HTTP请求与HTTP响应的格式相近,都有着如下结构: 以状态行+CRLF(回车换行)开始零行或多行头模块+CRLF一个空行,比如CRLF可选的消息体比如文件,查询数据,查询输 ...

  9. 学习wavenet_vocoder之预处理、训练

    一.预处理 1.在进行预处理时,如果不明白需要的参数,可以使用命令获取帮助,从这里我们可以看到可以具体的用法和对应的参数. python preprocess.py --help python pre ...

  10. twitter api的使用

    1.用手机号注册推特账号 https://twitter.com/ 2.进入网站 https://apps.twitter.com/ 创建第一个app,填入基本信息 name写完会检测是否已经存在像我 ...