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. expect自动远程拷贝脚本

    expect自动远程拷贝脚本,利用rsync命令,脚本内容如下: #!/usr/bin/expect -- proc Usage_Exit {self} { puts "" put ...

  2. 【leetcode】74. Search a 2D Matrix & 240. Search a 2D Matrix II

    题目如下:这两个题目可以用同样的代码来解答,因此就合并在一起了. 题目一: 题目二: 解题思路:两个题目的唯一区别在于第二个题目下一行的最小值不一定会小于前一行的最大值.但是不管怎么样我们可以确定的是 ...

  3. APP功能测试注意点

    App功能测试的7大注意点 : APP测试   在日常工作的摸索中,我们将如何做好app测试的注意点简单归结为如下内容.  弱网测试,兼容性测试,UI测试.中断测试, 01 运行 1)App安装完成后 ...

  4. HDU 4277 USACO ORZ(DFS暴搜+set去重)

    原题代号:HDU 4277 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277 原题描述: USACO ORZ Time Limit: 5000/1 ...

  5. CodeForces - 474D (dp)

    题目:https://vjudge.net/contest/326867#problem/B 题意:有很多个蛋糕,现在你有两种吃蛋糕的吃法,一次吃一个,定为A,一次吃k个定为B,然后问你吃m个蛋糕有多 ...

  6. E. Natasha, Sasha and the Prefix Sums

    http://codeforces.com/contest/1204/problem/E 给定n个 1 m个 -1的全排 求所有排列的$f(a) = max(0,max_{1≤i≤l} \sum_{j ...

  7. testlink用例转换工具2018.12版

    首先说明一点,网上有很多资料,但真正可用的很少:在本人经过百度后,发现其实很多案例会因为各种原因而无法最终实现. Testlink用例转换工具,可以大致分为3种工具: 1)EX-Converter由第 ...

  8. 笨办法学Python(learn python the hard way)--练习程序42

    下面是练习42,基于python3 #ex42.py 1 class TheThing(object): 2 #__init__为class设置内部变量的方式,正常情况下函数内的变量与外部没有关联,但 ...

  9. 用CSS代码编写简易轮播图

    废话不多说,直接上代码 <!doctype html> <html> <head> <title></title> <meta cha ...

  10. Mybatis传多个参数(三种解决方案) mapper.xml的sql语句修改!

    第一种 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser&qu ...