Django:登录、注册、退出
创建项目:
一、创建项目
django-admin startproject form_test
二、创建应用
1、cd form_test
2、sudo ./manage.py startapp form_app
三、配置应用
1、vim setting.py
2、在INSTALLED_APPS添加刚创建的应用(’form_app’)
四、创建url(form_test/urls.py)
#form_test/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'form_test.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'form_app.views.login',name='login'),
url(r'^login/$', 'form_app.views.login',name='login'),
url(r'^regist/$', 'form_app.views.regist',name='regist'),
url(r'^index/$', 'form_app.views.index',name='index'),
url(r'^logout/$', 'form_app.views.logout',name='logout'),
url(r'^share/$', 'form_app.views.share',name='share'),
)
五、创建数据库对象(form_app/models.py)
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
def __unicode__(self):
return self.username
六、编写视图(/form_app/views.py)
#coding:utf-8
from django.shortcuts import render,render_to_response
from django import forms
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from models import User
# Create your views here.
#表单
class UserForm(forms.Form):
username = forms.CharField(label='用户名',max_length=100)
password = forms.CharField(label='密__码',widget=forms.PasswordInput())
def regist(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
#获取表单数据
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#添加到数据库
#User.objects.get_or_create(username = username,password = password)
registAdd = User.objects.get_or_create(username = username,password = password)[1]
if registAdd == False:
#return HttpResponseRedirect('/share/')
return render_to_response('share.html',{'registAdd':registAdd,'username':username})
else:
return render_to_response('share.html',{'registAdd':registAdd})
else:
uf = UserForm()
return render_to_response('regist.html',{'uf':uf},context_instance=RequestContext(req))
def login(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#对比提交的数据与数据库中的数据
user = User.objects.filter(username__exact = username,password__exact = password)
if user:
#比较成功,跳转index
response = HttpResponseRedirect('/index/')
#将username写入浏览器cookie,失效时间为3600
response.set_cookie('username',username,3600)
return response
else:
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf},context_instance=RequestContext(req))
#登录成功
def index(req):
username = req.COOKIES.get('username','')
return render_to_response('index.html',{'username':username})
#退出登录
def logout(req):
response = HttpResponse('logout!!!')
#清除cookie里保存的username
response.delete_cookie('username')
return response
def share(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
return render_to_response('share.html',{'username':username})
else:
uf = UserForm()
return render_to_response('share.html',{'uf':uf})
七、创建templates(form_app/templates)
1、cd templates
2、sudo touch share.html、regist.html、login.html、logout.html、index.html
3、share.html
{{registAdd}}
<br>
==================
<br>
{% if username %}
注册失败{{username}}已存在
<a href="http://127.0.0.1:8000/regist">注册</a>
{% else %}
注册成功!
<a href="http://127.0.0.1:8000/login">登录</a>
{% endif %}
4、regist.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Regist</title>
</head>
<body>
<h1>注册页面</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{uf.as_p}}
<input type="submit" value="ok"></input>
</form>
<a href="http://127.0.0.1:8000/login">登录</a>
</body>
</html>
5、login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<h1>登录页面</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{uf.as_p}}
<input type="submit" value="ok"></input>
</form>
<a href="http://127.0.0.1:8000/regist">注册</a>
</body>
</html>
6、index.html
<!DOCTYPE html>
<html>
<head>
<title>index</title>
</head>
<body>
<h1>Welcome {{ username }}!</h1>
<br>
<a href="http://127.0.0.1:8000/logout">退出</a>
</body>
</html>
Django:登录、注册、退出的更多相关文章
- django 登录注册注销
一.设计数据模型 1.数据库模型设计 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息.很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息: 用户名 密码 邮箱地址 性别 ...
- django登录注册验证之密码包含特殊字符,确认密码一致实现,Form验证
Form验证的原理 首先用户在注册界面提交表单,后台收到表单之后通过request.post取到数据然后传入已经写好的Form类 执行obj.is_valid()这里的obj为Form的实例,在For ...
- [oldboy-django][2深入django]登录注册页面验证码
后台生成随机验证码 #验证码生成 - 在login.html 中有一张验证码图片 设置图片的src url, 相当于发送一次get请求,返回的内容为图片渲染的内容 <div class=&quo ...
- django 登录、注册
一.登录 1.在blogapp同级目录下新建一个userapp python manage.py startapp users 目录结构如下: 2.在主项目urls.py中新建users的includ ...
- PHP注册与登录【3】 用户登录与退出
登录页面 login.html 负责收集用户填写的登录信息. <fieldset> <legend>用户登录</legend> <form name=&quo ...
- Django的内置登录、退出、修改密码方法
Django中内置的登录.退出.修改密码方法. 1.url.py中使用django.contrib.auth中的views函数,django.views.generic中的TemplateView函数 ...
- django的权限认证:登录和退出。auth模块和@login_required装饰器
在settings.py中配置LOGIN_URL参数: # 用户访问带有(@login_required)标签的页面(view)时,如果没有登录,就会跳转到LOGIN_URL(即登陆url). LOG ...
- Django+pycharm+mysql 实现用户登录/注册(Django五)
首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...
- Django项目登录注册系统
Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
随机推荐
- 索引有B+索引和hash索引,各自的区别
Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B+树索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,那为什么大家不都用Hash索引而还要使用B+树索引呢? ...
- HTML 行内-块级-行块级
行内元素 相邻元素可以在一行显示直到一行排不下才进行换行. 不可设置宽高.对齐等属性,宽度随内容变化. padding和margin的设置中,水平方向(padding-left...)有效果,垂直方向 ...
- 发布mybatis-generator-core 1.3.5的中文注释版
源码剖析介绍:基于mybatis-generator-core 1.3.5项目的修订版以及源码剖析 目前,我把该项目,发布到了Maven中央仓库中,可直接使用: 使用方式 在项目.pom中,添加以下部 ...
- js实现回到顶部功能
js实现回到顶部功能 一.总结 一句话总结: 可以通过js或者jquery可以很快的控制页面的属性,比如高度等等 //设置当前视口的顶端数值 var setScrollTop = function(t ...
- Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)
//Qt主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...
- nginx状态码
200:服务器成功返回网页 403:服务器拒绝请求.404:请求的网页不存在 499:客户端主动断开了连接.500:服务器遇到错误,无法完成请求.502:服务器作为网关或代理,从上游服务器收到无效响应 ...
- 一百一十九:CMS系统之将短信验证码和图形验证码放到memcached缓存中
将两个验证码的视图都放到common蓝图下 from flask import Blueprint, request, make_responsefrom exts import alidayufro ...
- kettle在linux下面用于shell脚本执行:转换或者作业
1 将windows下面创建好的转换,放到Linux某一个文件夹下面.如:把0816_em.ktr文件放到/home/cfj/kettle/testdemo下面. 注意里面的数据库用户名和密码可能需要 ...
- goroutine 调度算法
自从开始使用 Go 语言,到现在也有一年多了,虽不算精通,但也算小有理解.在这里简单记录一下我的心得(其实是学习别人的心得) goroutine,Go 语言中 cpu 运行的最小单元,与 lua 携程 ...
- Linux命令集锦:scp命令
scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的,可能会稍微影响一下速度.当你服务器硬盘变为只读 read on ...