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 ...
随机推荐
- jquery 对于新插入的节点 的操作绑定(点击事件,each等)
因为最近项目遇到这个问题,下面给大家带来一篇Jquery对新插入的节点 获取并对这个节点绑定事件失效的解决方法.我觉得挺不错的,大家也可以参考一下: 对于绑定事件来讲: 方法一:使用liv ...
- 粘性固定 position:sticky
在研究rem布局时,无意中看到网易新闻移动端首页的导航栏用上了一个CSS 3的属性粘性定位position:sticky,它是相对定位(position:relative)和固定定位(position ...
- Python图谱
Reference: https://time.geekbang.org/column/article/94311
- webpack中require.context 用法
1.require.context(directory, useSubdirectories = false, regExp = /^\.\//) Examples: require.context( ...
- Mac升级系统后 Pod Install报错-不能用 解决办法
brew reinstall cocoapods brew install ruby brew link --overwrite cocoapods 最近将Mac OS升级到10.15.1 ,再回来初 ...
- SQL把a表字段数据存到b表字段 update,,insert
update SYS_Navigation set SYS_Navigation.PARENT_XH = SYS_Power_menu.parent_id,SYS_Navigation.web_tit ...
- Spring——简介
学习网站: [1]http://spring.io/ [2]http://projects.spring.io/spring-framework/ Spring是为解决企业应用开发的复杂性而创建的,是 ...
- router-link传递参数并获取
跳转链接: <router-link :to="{path:'libraryDetail/', query:{library_id:data.library_id}}"> ...
- python分别使用多线程和多进程获取所有股票实时数据
python分别使用多线程和多进程获取所有股票实时数据 前一天简单介绍了python怎样获取历史数据和实时分笔数据,那么如果要获取所有上市公司的实时分笔数据,应该怎么做呢? 肯定有人想的是,用一个 ...
- 移动端轮播完整版css3加原生写法
<!doctype html><html><head> <meta charset="UTF-8"> <meta name=& ...