当前位置: 首页 > 编程日记 > 正文

django 快速实现登录

前言

对于web开来说,用户登陆、注册、文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性;对于web应用来说,包括数据库的创建,前端页面的开发,以及中间逻辑层的处理三部分。

本系列以可操作性为主,介绍如何通过django web框架来实现一些简单的功能。每一章都具有完整性和独立性。希望新手在动手做的过程中体会web开发的过程,过程中细节请参考相关文档。

本操作的环境:

===================

deepin linux 2013(基于ubuntu

python 2.7

Django 1.6.2

===================

在上一节中介绍了django 如何实现用户注册,用户注册好了账号,就可以拿着注册的账号去登录了。这一节介绍如何实现用户登录。

创建项目与应用                                                                

#创建项目
fnngj@fnngj-H24X:~/djpy$ django-admin.py startproject mysite4
fnngj@fnngj-H24X:~/djpy$ cd mysite4
#在项目下创建一个login应用
fnngj@fnngj-H24X:~/djpy/mysite4$ python manage.py startapp login

项目目录结构如下:

打开mysite4/mysite4/settings.py文件,将应用添加进去:

# Application definition
INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','login',
)
……
#顺便注释csrf 
MIDDLEWARE_CLASSES = ('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
)

设计model(数据库)                                

打开mysite4/login/models.py文件,添加如下内容

from django.db import models
from django.contrib import admin
# Create your models here.
class User(models.Model):username = models.CharField(max_length=50)password = models.CharField(max_length=50)admin.site.register(User)

创建一个User表,有两个字段usernamepassword 

然后,进行数据库的同步:

fnngj@fnngj-H24X:~/djpy/mysite4$ python manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table login_user
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes   输入yes/noUsername (leave blank to use 'fnngj'):     用户名(默认当前系统用户名)
Email address: fnngj@126.com     邮箱地址
Password:    密码
Password (again):    确认密码
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

配置URL

打开mysite4/mysite4/urls.py

from django.conf.urls import patterns, include, urlfrom django.contrib import admin
admin.autodiscover()urlpatterns = patterns('',# Examples:# url(r'^$', 'mysite5.views.home', name='home'),# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
)

启动服务

fnngj@fnngj-H24X:~/djpy/mysite4$ python manage.py runserver
Validating models...0 errors found
May 21, 2014 - 14:31:32
Django version 1.6.2, using settings 'mysite4.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

访问admin

http://127.0.0.1:8000/admin/

登录用户名和密码为我们进行数据库同步时所设置的信息。

登录之后,选择add 添加用户。

创建用户,点击save

再次打开mysite4/login/models.py文件,添加如下内容

from django.db import models
from django.contrib import admin
# Create your models here.
class User(models.Model):username = models.CharField(max_length=50)password = models.CharField(max_length=50)class UserAdmin(admin.ModelAdmin):list_display = ('username','password')admin.site.register(User,UserAdmin)

再次刷新,admin后台,如下显示:

创建视图                                                                                

现在我们已经生成了一个用户信息表,下面要做的就是设计用户登录功能了。

打开mysite4/login/views.py 文件

#coding=utf-8
from django.shortcuts import render,render_to_response
from django.http import HttpResponseRedirect
from login.models import User
from django import forms#定义表单模型
class UserForm(forms.Form):username = forms.CharField(label='用户名:',max_length=100)password = forms.CharField(label='密码:',widget=forms.PasswordInput())#登录
def login(request):if request.method == 'POST':uf = UserForm(request.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:return render_to_response('success.html',{'username':username})else:return HttpResponseRedirect('/login/')else:uf = UserForm()return render_to_response('login.html',{'uf':uf})

上面登录的核心是比较,拿到用户填写的表单数据(用户名、密码)与数据库User表中的字段进行比较,根据比较结果,如果成功跳转到success.html页面,如果失败还留在原来页面login.html 

创建模板                                                                          

根据视图层的要求,我们需要创建两个页面,success.html login.html 

先在mysite4/login/目录下创建templates目录,接着在mysite4/login/templates/目录下创建login.html 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>登录</title>
</head><style type="text/css">body{color:#efd;background:#453;padding:0 5em;margin:0}h1{padding:2em 1em;background:#675}h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}p{margin:1em 0}</style>
<body>
<h1>登录页面:</h1>
<form method = 'post' enctype="multipart/form-data">{{uf.as_p}}<input type="submit" value = "ok" />
</form>
</body>
</html>

mysite4/login/templates/目录下创建success.html 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title>
</head>
<body><h1>恭喜{{username}},登录成功!</h1>
</form>
</body>
</html>

设置模板路径

打开mysite4/mysite4/settings.py文件,在底部添加:

#template
TEMPLATE_DIRS=('/home/fnngj/djpy/mysite4/login/templates'
)

配置URL                                                                                                    

打开mysite4/mysite4/urls.py

from django.conf.urls import patterns, include, urlfrom django.contrib import admin
admin.autodiscover()urlpatterns = patterns('',# Examples:# url(r'^$', 'mysite5.views.home', name='home'),url(r'^login/', include('login.urls')),url(r'^admin/', include(admin.site.urls)),
)

创建文件mysite4/login/urls.py

from django.conf.urls import patterns, url
from login import viewsurlpatterns = patterns('',url(r'^$', views.login, name='login'),
)

启动服务(python manage.py runserver),

访问登录页面(http://127.0.0.1:8000/login/)

用户名、密码正确,点击OK ,跳转到登录成功页面:

转载于:https://www.cnblogs.com/fnng/p/3748043.html

相关文章:

“云智一体”的全场景智能视频技术是什么?

全视频时代到来&#xff0c;各行各业对视频的应用、体验和效能提出全新升级需求&#xff0c;AI与云计算的发展则为智能视频进入新阶段注入充足动力。5月13日&#xff0c;百度智能云“云智技术论坛-智能视频专场”活动在北京举行&#xff0c;重磅发布了智能视频云3.0全景图。百度…

背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue...

原文:背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue[源码下载] 背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue作者&#xff1a;webabcd介绍背水一战 Windows 10…

2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683...

本文原创于 2014-02-12 09:26。 今复习之用&#xff0c;有新体会&#xff0c;故重新编辑。 2014-02-12 09:26&#xff1a; 2-sat之第二斩&#xff01;昨天看了半天论文&#xff08;赵爽的和俉昱的&#xff09;&#xff0c;终于看明白了&#xff01;好激动有木有&#xff01;终…

C#方法/函数

本节课向你介绍C#的方法&#xff0c;其目的是&#xff1a; 1.了解方法的结构格式2.了解静态和实例方法之间的区别3.学会实例对象的使用4.学会如何调用实例化的对象5.学会方法的四种参数类型的使用6.学会使用"this"引用以往&#xff0c;对于每个程序来说&#xff0c;所…

Python 的一万种用法:生成字符视频

作者 | ZackSock来源 | 新建文件夹X头图 | 下载于视觉中国前言在之前也写过生成字符视频的文章&#xff0c;但是使用的是命令行窗口输出&#xff0c;效果不是很好&#xff0c;而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样&#xff1a;Python2…

Codeforces 862B - Mahmoud and Ehab and the bipartiteness

862B - Mahmoud and Ehab and the bipartiteness 思路&#xff1a;先染色&#xff0c;然后找一种颜色dfs遍历每一个点求答案。 代码&#xff1a; #include<bits/stdc.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,si…

C#表达式,类型和变量

本节课将介绍C# 语言的表达式&#xff0c;类型和变量。本节课要达到如下几个目的&#xff1a; 1.了解什么是"变量"2.学习C#的简单类型3.对C#表达式有个初步的了解4.了解什么是String类型5.学习如何使用数组"变量"仅仅是数据的存储位置。你可以把数据存放到…

张一鸣卸任CEO,立下10年之约,期望突破线性延伸

整理 | 寇雪芹头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;5月20日&#xff0c;字节跳动创始人张一鸣发布内部全员信&#xff0c;宣布卸任CEO&#xff0c;联合创始人梁汝波将接任这一职位。张一鸣在全员信中表示&#xff0c;“我决定卸任CE…

【译】使用Kotlin和RxJava测试MVP架构的完整示例 - 第1部分

原文链接&#xff1a;android.jlelse.eu/complete-ex… 最近我创建了一个playground项目来了解更多关于Kotlin和RxJava的信息。 这是一个非常简单的项目&#xff0c;但有一部分&#xff0c;我进行了一些尝试&#xff1a;测试。 在kotlin的测试上可能会有一些陷阱&#xff0c;而…

智能改变未来,创新引领世界,第二届深圳国际人工智能展暨智能制造创新高峰论坛盛大启幕!

2021年5月20日&#xff0c;由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导&#xff0c;深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心&#xff08;福田&#xff09;启…

C#循环控制语句

本节课将介绍如何使用C#控制语句中的循环语句&#xff0c;本课目的如下&#xff1a; 1.学会"while"循环的用法。2.学会"do" 循环的用法。3.学会"for" 循环的用法。4.学会foreach循环的用法。5.进一步了解"break"语句的用法。6.如何使用…

2017-09-22 前端日报

2017-09-22 前端日报 精选 JavaScript 在 V8 中的元素种类及性能优化【译】异步递归&#xff1a;回调、Promise、Async[译]HTML&CSS Lesson5: 定位一个页面阻塞问题的排查过程前端分享之cookie的使用及单点登录An event for CSS position:stickyanvaka/ngraph.path: Path f…

C#选择控制语句

本节课将介绍如何使用C#选择控制语句&#xff0c;第三课将达到如下几个目的&#xff1a; 1.学会"if"语句的用法。2.学会"switch"语句的用法。3.学会在"switch"语句中如何使用"break"语句。4.理解"goto"语句的正确用法。在前…

将博客搬至51CTO

将博客搬至51CTO转载于:https://blog.51cto.com/imace/1540730

腾讯国风AI虚拟人学会作诗书法,背靠开源模型SongNet

5月21日&#xff0c;腾讯AI虚拟人艾灵再秀出新技能&#xff0c;首次展示AI作诗、AI书法等国风才艺&#xff0c;并与青年歌手白举纲跨次元合作&#xff0c;共同演唱国风新歌《百川千仞》。 AI“艾灵”诞生于腾讯AI Lab&#xff0c;来自实验性、探索性技术项目“多模态虚拟人”。…

Windows10安装Mysql5.7.19.0 msi 版本报错

安装环境&#xff1a;Windows10安装版本&#xff1a;MySql 5.7.19.0 msi1.安装5.7.19.0 msi版本Mysql时报如下错误&#xff1a;2.根据日志分析是缺少visual Studio 2013 Redistributable3.下载完成后&#xff0c;安装仍然显示失败&#xff1a;4.在网上下载各种vs测试&#xff0…

C#简单的欢迎程序

本节课通过介绍几个简单的程序&#xff0c;使得你对C#有所入门。本节程要达到如下几个目的&#xff1a; 1.理解一个C#程序的基本结构。2.初步了解"名称空间"的概念。3.初步了解"类"的概念。4.了解"Main"方法所做的工作。5.学会如何读取命令行输入…

知乎联合清华:开放国内最大个性化推荐实际交互数据集

5月21日&#xff0c;知乎联合清华大学对外开放基于知乎的大规模富文本查询和推荐数据集“ZhihuRec”。该数据集包含了知乎上的1亿个行为数据&#xff0c;是目前为止&#xff0c;国内用于个性化推荐的最大的实际交互数据集。 作为一个大型数据集&#xff0c;ZhihuRec具有社交化问…

SQL Server 2014 许可证(五)降级与升级

“版本”一词对应的英文单词有两个&#xff1a;&#xff08;1&#xff09; Version是指不同历史时期发生的产品&#xff0c;或者指产品不同的“代”&#xff0c;例如&#xff0c;SQL Server 2014 版本。&#xff08;2&#xff09; Edition是指在发行同一代产品&#xff08;Vers…

OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划

注&#xff1a;本文为原著&#xff08;其内容来自 腾科教育培训课堂&#xff09;。阅读本文注意事项如下&#xff1a;1&#xff1a;所有文章的转载请标注本文出处。2&#xff1a;本文非本人不得用于商业用途。违者将承当相应法律责任。3&#xff1a;该系列文章目录列表&#xf…

赠书 | 联邦学习如何在视觉领域应用?

前言&#xff1a;联邦学习是如何应用在视觉领域的&#xff1f;本文将通过一个获得了2020年AAAI人工智能创新应用奖的案例来向大家介绍。本案例是联邦学习在视觉、物联网、安防领域的实际应用&#xff0c;对分散在各地的摄像头数据&#xff0c;通过联邦学习&#xff0c;构建一个…

AME_Oracle自带AME审批链详解AME Standard Handler(概念)

2014-05-30 Created By BaoXinJian Oracle 自带了3大类&#xff0c;13个子类的审批链Action Type, 对应了13个标准的AME Standard Handler 1. 按主管层次审批 absolute job level / chains of authority based on absolute job levelfinal approver only / chains of authorit…

c# 中如何定义和接收消息

在C#中目前我还没有找到发送消息的类成员函数&#xff0c;所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler) &#xff0c;所以又要调用另一个API FindWindow(), 两者配合使用&#xff0c;达到在不同窗体之间的…

java如何读写json文件

java如何读写json文件 在实际项目开发中&#xff0c;有时会遇到一些全局的配置缓存&#xff0c;最好的做法是配置redis数据库作为数据缓存&#xff0c;而当未有配置redis服务器时&#xff0c;读取静态资源文件&#xff08;如xml、json等&#xff09;也是一种实现方式&#xff0…

C#数组篇讲解

数组是我们经常用到的&#xff0c;我来介绍一下&#xff1a;数组是具有相同类型的一组数据。当访问数组中的数据时&#xff0c;可以通过下标来指明。c#中数组元素可以为任何数据类型&#xff0c;数组下标从0开始&#xff0c;即第一个元素对应的下标为0&#xff0c;以后逐个递增…

Spring AOP详解(转载)所需要的包

上一篇文章中&#xff0c;《Spring Aop详解&#xff08;转载&#xff09;》里的代码都可以运行&#xff0c;只是包比较多&#xff0c;中间缺少了几个相应的包&#xff0c;根据报错&#xff0c;几经百度搜索&#xff0c;终于补全了所有包。 截图如下&#xff1a; 在主测试类里面…

Mendix 披露低代码方法论,解读真实技术趋势

作者 | 宋慧头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;在 2021年初正式宣布进入中国市场之后&#xff0c;Mendix 在近日向媒体重点披露了关于低代码的技术方法论&#xff0c;以及近四个月在中国市场的进展。Mendix 的低代码技术方法论对于…

PHP中foreach详细解读

oreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象&#xff0c;如果尝试应用于其他数据类型的变量&#xff0c;或者未初始化的变量将发出错误信息。有两种语法&#xff1a; foreach (array_expression as $value) statement foreach (array_expression…

Android ViewPager使用具体解释

这是谷歌官方给我们提供的一个兼容低版本号安卓设备的软件包&#xff0c;里面包囊了仅仅有在安卓3.0以上能够使用的api。而viewpager就是当中之中的一个利用它&#xff0c;我们能够做非常多事情&#xff0c;从最简单的导航&#xff0c;到页面菜单等等。那怎样使用它呢&#xff…

实时音视频的超级风口,开发者的机会在哪里?

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse&#xff0c;又以肉眼可见的速度跌落神坛&#xff0c;下载量从2月的960 万/月跌至4月的92万/月。不过在5月&#xff0c;Clubhouse终于推出了安卓版&#xff0c;并表示接下来也会对所有用户开放。 另一边&#xff0c…