• Django Step by Step 2010版(基于Django 1.1.1) 第五讲


    原文:http://hi.baidu.com/qbdiy/blog/item/c80fca80c88b41dc9023d954.html

    1. 引言


    这一讲我们要学习session,并开始接触模型(Model)。

    session也就是会话,是为了在Web页面间交换数据而产生的,它保存在浏览器的cookie中。

    在Django中使用session非常简单,只需要访问request对象的session属性,你可以把它当作一个字典来使用。

    我们马上开始试验。给用户提供一个登录页面,上面有一个文本框用来输入用户名,还有一个提交按钮用来提交数据。当用户输入用户名,点击提交按钮后,就显示 用户已经登录,并且打印出用户输入的用户名,同时提供一个注销按钮。如果用户点击了注销按钮,就回到未登录的页面。未登录状态和登录状态是被记忆的,也就 是当你登录成功,并且没有注销时,你再次访问仍然显示的是登录成功的页面。当你没有登录或者注销后,你再次访问的就是未登录成功的页面。

    2. 创建login.py文件

    在newtest/目录下创建login.py文件,内容如下:

    from django.http import HttpResponseRedirect
    from django.shortcuts import render_to_response

    def login(request):
    username = request.POST.get('username', None)
    if username:
    request.session['username'] = username
    username = request.session.get('username', None)
    if username:
    return render_to_response('login.html', {'username':username})
    else:
    return render_to_response('login.html')

    def logout(request):
    try:
    del request.session['username']
    except KeyError:
    pass
    return HttpResponseRedirect('/login')



    这里定义了两个View方法,login()和logout()。login()提供登录页面,处理用户提交的数据,判断用户是否登录。logout() 从session中删除用户名,将页面重新定向到登录页面。Django的模板支持条件判断,因此这里可以通过传入不同的字典来控制模板的生成。

    login()的具体工作流程是这样的:

    1) 从POST中取出username,POST中的数据是由HTML页面的表单(form)提供的。如果成功取得了username,就把它加入到 session中去(实际上就是操作session这个字典,如果username这个键不存在,就新建这个键值对,如果username这个键已存在, 就覆盖这个键值对)。

    2) 从session中取出username。如果成功取得了username,就返回已登录的页面,如果没有取得username,就返回未登录的页面。这里调用不同页面就是通过往模板传入不同的字典来实现的。

    logout()的工作流程更简单:尝试删除session,然后重定向到未登录页面。

    3. 创建login.html文件

    创建newtest/templates/login.html文件,内容如下:

    {% if not username %}
    <form method="post" action="/login/">
    用户名:<input type="text" name="username" value=""><br/>
    <input type="submit" value="登录">
    </form>
    {% else %}
    {{ username }},您已经登录了!<br/>
    <form method="post" action="/logout/">
    <input type="submit" value="注销">
    </form>
    {% endif %}



    Django模板中的if的用法和Python中相似,可以使用not, and, or。在这里,如果username不存在,则显示一个表单,显示用户名输入文本框和登录按钮。如果username存在,则显示用户名和注销按钮。

    4. 修改urls.py

    找到urlpatterns,修改为:

    urlpatterns = patterns('',
    (r'login/$', 'newtest.login.login'),
    (r'logout/$', 'newtest.login.logout'),
    )

    5. 修改settings.py

    Django的session需要使用数据库,Python 2.6中内置了sqlite3数据库,因此我们在这里直接使用sqlite3。sqlite3直接使用本地文件存储数据库,因此不存在服务器、端口、用户 名、密码、权限的配置问题,马上就可以开始使用,简单方便。

    对newste/settings.py进行如下修改:

    [quote]DATABASE_ENGINE = 'sqlite3'
    DATABASE_NAME = './data.db'
    DATABASE_USER = ''
    DATABASE_PASSWORD = ''
    DATABASE_HOST = ''
    DATABASE_PORT = ''



    6. 初始化数据库

    需要手动执行syncdb命令来完成数据库的初始化操作,包括创建数据库、数据表。命令如下:

    $ ./manage.py syncdb

    当出现是否要创建超级用户的提示时:

    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,然后创建一个用户名和密码都是test的超级用户。这个超级用户在以后会用到。

    7. 在Web浏览器中测试

    先启动Django内置的Web服务器,然后在你的浏览器中输入http://127.0.0.1:8000/login/。接下来测试一下登录和注销。

    8. 小结

    这一讲中,我们学习了Django中session的使用,尝试了模板(template)渲染(render)的另一种方式,并且初步接触了模型(model)。这些内容在网站开发中将会经常用到。

  • 相关阅读:
    Asp.Net 编码和解码
    远程连接端口号改变的数据库服务器
    SqlServer:PIVOT操作
    细说Sql Server中的视图(上)(更新)
    ubuntu安装nginx和设置网站https访问
    批量修改git仓库地址脚本
    解决macOS升级之后每次使用ssh都要输入密码的问题
    hexo博客简易搭建教程
    dcoker入门,使用docker部署NodeJs应用
    腾讯云+校园扶持计划是bug还是福利
  • 原文地址:https://www.cnblogs.com/mfryf/p/2555333.html
Copyright © 2020-2023  润新知