登录的用户可以点击自己的用户名显示自己的注册信息以及自己的所有收货地址信息。
...url(r'^user_info/$', views.user_info),... |
---|
...# 获取用户信息def user_info(request): #检查用户是否登录 util = Util() username = util.check_user(request) #如果没有登录,跳转到首页 if username=="": uf = LoginForm() return render(request,"index.html",{'uf':uf,"error":"请登录后再进入!"}) else: #count为当前购物车中商品的数量 count = util.cookies_count(request) #获取登录用户信息 user_list = get_object_or_404(User,username=username) #获取登录用户收货地址的所有信息 address_list = Address.objects.filter(user_id=user_list.id) return render(request,"view_user.html",{"user": username,"user_info":user_list,"address":address_list,"count":count})... |
---|
关于检查用户是否通过合法途径登录,在本书第2.4.2节中已经进行过详细地介绍。
(1)当检查当前用户为合法用户后,通过语句count = util.cookies_count(request)调用util类中的cookies_count()方法,显示当前用户的购物车内有多少商品。
(2)通过语句user_list= get_object_or_404(User,username=username)获取当前登录用户的信息。
(3)然后通过语句address_list= Address.objects.filter(user_id=user_list.id)获取当前用户的所有地址信息。
(4)最后通过语句returnrender(request,"view_user.html",{"user":username,"user_info":user_list,"address":address_list,"count":count})返回给模板文件view_user.html,其中传过去的变量包括。
① user:当前登录用户名。
② user_info:当前登录用户名信息。
③ address:当前登录用户的所有地址信息。
④ count:当前购物车内商品的数量。
view_user.html
{% extends "base.html" %}{% block content %} <li><a href="/view_chart/">查看购物车<font color="#FF0000">{{ count }}</font></a></li> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="/user_info/">{{user}}</a></li> <li><a href="/logout/">退出</a></li> </ul> </div><!--/.nav-collapse --> </div> </nav> <div class="container theme-showcase" role="main"> <div> <div id="navbar" class="navbar-collapse collapse"> </div><!--/.navbar-collapse --> </div> <div> <div> 用户名:{{user_info.username}}<br> Email:{{user_info.email}}<br> <form action="/change_password/" method="get"> <input type="submit" value="修改密码"> </form> <table class="table table-striped"> <thead> <tr> <th>编号</th> <th>地址</th> <th>电话</th> <th>修改</th> <th>删除</th> </tr> </thead> <tbody> {% for key in address %} <tr> <td>{{key.id}}</td> <td>{{key.address}}</td> <td>{{key.phone}}</td> <td><a href="/update_address/{{key.id}}/1/">修改</a></td> <td><a href="/delete_address/{{key.id}}/1/">删除</a></td> </tr> {% endfor %} </tbody> </table> </form><br> <form method="get" action="/add_address/1/"> <input type="submit" value="添加地址"> </form> </div> </div> {% endblock %} |
---|
模板通过{%extends "base.html" %}和{% block content %}...{% endblock %}套用一个名叫"base.html"的模板文件,base.html见下。
{%load staticfiles%}<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <meta name="description" content=""> <meta name="author" content=""> <title>电子商务系统</title> <!-- Bootstrap core CSS --> <link href="{%static 'css/signin.css'%}" rel="stylesheet"> <!-- Custom styles for this template --> <link href="{%static 'css/bootstrap.min.css'%}" rel="stylesheet"> </head> <body role="document"><!-- 导航栏 --> <nav class="navbar navbar-inverse navbar-fixed-top"> <div> <div> <a href="/goods_view/">电子商务系统</a> </div> <div id="navbar" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li><a href="/goods_view/">商品列表</a></li> <li><a href="/view_all_order/">查看所有订单</a></li> {% block content %} {% endblock %} <div class="container theme-showcase" role="main"> <div> </div> <footer> <p>© Company 2017,作者:顾翔</p> </footer> </div><!-- /container --> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> </body> </html> |
---|
可以看到,这有点象传统HTML中的frame或者iframe,但是使用起来要方便得多。
再回到view_user.html的页面上来,views.py返回当前用户信息的列表参数user_info,通过{{user_info.username}}和{{user_info.email}}来显示当前用户的用户名及Email信息。通过以下的HTML代码来修改密码。
...<form action="/change_password/" method="get"><input type="submit" value="修改密码"></form>... |
---|
进入修改密码的界面。views.py返回页面当前用户收货地址信息的列表参数address,由于一个用户可以有一到多个收货地址信息,所以模板通过{% for key in address %}...{% endfor %}在<table>...</table>中显示,并且可以对收货地址记录进行修改和删除的操作。最后页面通过下面代码来添加当前用户的收货信息。
...<form method="get" action="/add_address/1/"><input type="submit" value="添加地址"></form>... |
---|
用户信息界面如图3-4所示。
图3-4用户信息
在这里“<a href="/update_address/{{key.id}}/1/">修改</a>”和“<ahref="/delete_address/{{key.id}}/1/">删除</a>”中{{key.id}} /后面的‘1’表示收货地址的修改和删除操作在用户信息中进行,从第3.6节介绍,会看到删除和修改操作也可以从生成订单的时候选择地址中进行操作,那个时候,参数由‘1’改为‘2’。同样<form method="get" action="/add_address/1/">中的‘1’也是这个道理。
星云测试
http://www.teststars.cc
奇林软件
http://www.kylinpet.com
联合通测
http://www.quicktesting.net