Django中用 form 实现登录注册
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 实现登录注册的更多相关文章
- Django基于Form之登录和注册
1.创建Forms文件,内容略多,大家将就着看,不懂请留言 #!/usr/bin/env python # -*- coding: utf8 -*- #__Author: "Skiler H ...
- Django基于form组件实现注册校验
一 基本流程 1 创建form组件对应的类,比如LoginForm 2 前端的三种渲染方式: 渲染方式三种: 1 <form action="" novalidate met ...
- 搭建自己的博客(二十一):通过django表单实现登录注册
1.变化的部分
- python利用django实现简单的登录和注册,并利用session实现了链接数据库
利用session实现与数据库链接,登录模块(在views.py) def login(request): # return HttpResponseRedirect('/') # 判断是否post方 ...
- django项目一 登录注册
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...
- django 登录注册注销
一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- Django+pycharm+mysql 实现用户登录/注册(Django五)
首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
随机推荐
- 谷歌浏览器遇到js报错自动进行断点调试,如何关闭
转载于csdn 附地址 http://blog.csdn.net/microcosmv/article/details/60793882 留备用.
- 【LuoguP4916】魔力环
题目链接 题意 求出 \(n\) 个珠子的在旋转同构意义下的手 环 个数,满足以下条件: 恰好有 \(m\) 个黑色珠子,其余为白色. 黑色珠子形成的最长连续段不能超过 \(k\) 个. Sol 考虑 ...
- Linux校园网DNS问题
问题 我发现在windows下连接校园网后能正常使用网络,可是到了Linux下,连接成功后还是不行 解决 在windows下找到ipv4的配置,然后查看一下那个DNS服务器的ip 在我们成都信息工程大 ...
- 决策树剪枝算法-悲观剪枝算法(PEP)
前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...
- 使用HTML和CSS来实现为文字设置图片底纹
先看一下最终实现的效果 图中的hello是文本而不是图片 那么如何实现这种效果呢? HTML部分: 创建一个h1标签 ,标签内容为(hello).通过link标签链接外部样式表style.css. s ...
- favicon.ico是什么?
一.什么是favicon? 所谓favicon,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站.favicon 中文名称:网页图标 英文名称:favorites ico ...
- HDU 2602 Bone Collector (01背包问题)
原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...
- android 小游戏 ---- 数独(二)
> 首先创建一个自己的View类 -->继承SurfaceView并实现SurfaceHolder.Callback接口 --> SurfaceView.getHolder ...
- [CSP-S模拟测试]:小P的单调数列(树状数组+DP)
题目描述 小$P$最近喜欢上了单调数列,他觉得单调的数列具有非常多优美的性质.经过小$P$复杂的数学推导,他计算出了一个单调增数列的艺术价值等于该数列中所有书的总和.并且以这个为基础,小$P$还可以求 ...
- 阿里云安装配置yarn,Nginx
1.和npm 相比yarn 的优势在于 1.比npm快.npm是一个个安装包,yarn 是并行安装. 2.npm 可能会有情况 同样的 package.json 文件在不同的机器上安装的包不一样.导致 ...