Python Web聊天室(一)--用户认证

很早之前学习django的时候写的一个小项目,最近时间比较充裕拿出来整理一下.

Python版本: 2.7.8

Django版本: 1.7.2

1.创建一个项目

django-admin startproject ChatRoom

2.在配置文件(settings.py)中添加模板与静态文件目录

TEMPLATE_DIRS = (
   os.path.join(BASE_DIR, 'templates'),
)          # 设置模板目录
STATICFILES_DIRS = (
   os.path.join(BASE_DIR, 'static'),
)          # 设置静态文件目录

3.创建一个app

E:\py\ChatRoom>django-admin startapp account

这个app主要用于账号管理(登录,退出,个人资料)

4.修改视图(account/views.py)文件

# coding: utf-8

from django.shortcuts import render_to_response,HttpResponseRedirect,HttpResponse
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.template.context import RequestContext


def login(request):
   # 用于保存登录状态
   data = {'loginStatus': ''}
   # 判断请求方法
   if request.method == 'POST':
      # 获取用户名和密码
      username = request.POST.get('username')
      password = request.POST.get('password')
      # 认证用户,如果账号密码匹配则返回用户名,否则返回None
      user = auth.authenticate(username=username, password=password)
      if user is not None:
         # 登录用户
         auth.login(request, user)
         return HttpResponse('登录成功!')
      # 如果账号密码不匹配返回的信息
      data['loginStatus'] = u'用户名或密码错误!'
   return render_to_response('account/login.html', data, content_instance=RequestContext(request))

render_to_response里的第一个参数是模板文件,第二个参数是传给模板的字典,可以在模板里调用,第三个参数是避免跨站请求伪造,更详细的介绍请参考django官方文档

5.修改urls文件

首先修改主urls文件(ChatRoom/urls.py)

from django.conf.urls import patterns, include, url
from django.contrib import admin


urlpatterns = patterns(
   '',
   url(r'^admin/', include(admin.site.urls)),
   # 当url以"account/"开头,交给"account.urls"处理
   url(r'^account/', include('account.urls')),
)

在account目录下创建urls.py文件并编辑

from django.conf.urls import patterns, url
from account import views


urlpatterns = patterns(
   '',
   # url为"account/login/"时,交给views.login函数处理
   url(r'^login/$', views.login),
)

6.编写模板文件

这里用到bootstrap,下载bootstrap之后放到static/boostrap目录

templates/account/login.html   #文件路径

<!DOCTYPE html>
<html>

   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Login</title>
      <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.css">
   </head>

<body class="container">
<div class="container-fluid" style="margin-top: 30px">
   <div class="well" style="width: 320px; margin-left: auto; margin-right: auto">
      <h3 style="margin: 0 0 20px;font-family: 微软雅黑;">登录认证</h3>
      <form action="/account/login/" method="POST">
         {% csrf_token %}
         <div id="div_id_username" class="clearfix">
            <div class="form-group">
               <label for="id_username">Username:</label>
               <input type="text" name="username" maxlength="16" autocapitalize="off" autocorrect="off" class="form-control" id="id_username" required="">
            </div>
         </div>
         <div id="div_id_password" class="clearfix">
            <div class="form-group">
               <label for="id_password">Password:</label>
               <input type="password" name="password" maxlength="16" autocapitalize="off" autocorrect="off" class="form-control" id="id_password" required="">
            </div>
         </div>
         <p style="color: red;">{{ loginStatus }}</p>
         <input type="submit" name="submit" value="Log in" class="btn btn-primary form-control" id="submit-id-submit">
      </form>
   </div><!--/.well-->
</div><!-- /.container-fluid -->
</body>
</html>

7.同步数据库

manage.py syncdb

根据提示创建账户

8.启动服务并测试

manage.py runserver 8000

访问http://127.0.0.1:8000/account/login/

看到下面的界面

wKioL1URNSLB726yAABnSEgr6jU086.jpg

输入错误的账号密码会看到错误信息

        wKiom1URM_DzJL1-AABqDKy9Co0389.jpg

输入正确的账号密码即可成功登陆

                       wKioL1URNSLA7QKeAAANUXybMto790.jpg


到这里我们用户认证的功能就做好了!

你可能感兴趣的:(python,django,用户认证)