网站制作公司前十排名,市场营销培训课程,wordpress主题 手机app,网站建设需求分析的实施前面的内容已经基本上涵盖了Django开发的主要方面#xff0c;我们从需求和界面设计出发#xff0c;创建模型和修改模型#xff0c;并通过scaffold作为开发的起点#xff1b;在scaffold的基础上重新定制模板#xff0c;并且通过Model类和Form类对用户输入的数据进行校验。我… 前面的内容已经基本上涵盖了Django开发的主要方面我们从需求和界面设计出发创建模型和修改模型并通过scaffold作为开发的起点在scaffold的基础上重新定制模板并且通过Model类和Form类对用户输入的数据进行校验。我们也涉及到了单元测试。为了提高开发用户界面的效率更好地实现模板我们还讨论了对静态资源cssjsimage等的管理并通过模板继承的方式实现了整个站点的统一布局。作为web应用必不可少的部分我们还演示了如何使用会话session。最后我们还在这些基础上增加了RESTful web service将jquery集成到Django并实现了ajax。 有了这些基础可以应付Django开发中的绝大多数问题。 下面我们继续实现depot购物车的web应用。本节要实现提交订单功能。现在买方已经可以挑选需要的产品放入购物车但是还不能进行购买。我们希望实现这样的功能 买方点击”结算“按钮然后输入姓名、地址和email信息就向卖方发出了一张订单该订单包含上述买方信息和其选购的所有条目。首先还是实现Model类。我们要增加一个订单类Order并修改原来的条目类LineItem增加到Order的外键即LineItem到Order的many-to-one关联。如下 [python] view plaincopy class Order(models.Model): name models.CharField(max_length50) address models.TextField() email models.EmailField() class LineItem(models.Model): product models.ForeignKey(Product) order models.ForeignKey(Order) unit_price models.DecimalField(max_digits8,decimal_places2) quantity models.IntegerField() 要注意因为LineItem引用了Order所以在定义模型类的顺序上要将Order放在前面。 前面介绍过修改模型类之后应该如何处理这里就不再重复了。 然后祭出scaffold快速生成一系列”丑陋“的界面。该工具还不够成熟在生成之前一定要备份depotapp/urls.py 、views.py 和 forms.py之后手工合并切记 之后将产品目录界面depot/templates/depotapp/store.html)中的”结算“标签的链接改为映射到生成的create_order视图函数 [html] view plaincopy aclassbtn successhref{% url depotapp.views.create_order %}结算/a 两 个界面就链接起来了。但是自动生成的订单界面并没有将session中的条目保存到数据库也没有清空购物车并且提交订单后没有返回到产品目录界面所 以还要对其进行修改。主要的修改在create_order视图函数中进行。为了方便对比将生成的原始视图函数列出如下 [python] view plaincopy def create_order(request): form OrderForm(request.POST orNone) if form.is_valid(): form.save() form OrderForm() t get_template(depotapp/create_order.html) c RequestContext(request,locals()) return HttpResponse(t.render(c)) 关于事务处理 ”保存订单“和”保存订单条目“应该形成一个事务。Django的事务处理可以通过middleware自动添加也可以手工添加。手工添加的方式更加灵活通过在view函数前增加修饰符decorator来实现有三种修饰符可以选择 [plain] view plaincopy transaction.autocommit 在 save() 或 delete() 时自动提交事务。 transaction.commit_on_success 当整个view成功后提交事务否则回滚 TransactionMiddleware采用的就是这种机制 transaction.commit_manually 需要手动调用commit或rollback。 我们暂时不想使用middleware的方式所以用transaction.commit_on_success来实现事务管理。这需要引用transaction模块from django.db import transaction 最终修改的create_order视图函数如下 [python] view plaincopy transaction.commit_on_success def create_order(request): form OrderForm(request.POST orNone) if form.is_valid(): order form.save() for item in request.session[cart].items: item.order order item.save() clean_cart(request) return store_view(request) t get_template(depotapp/create_order.html) c RequestContext(request,locals()) return HttpResponse(t.render(c)) 转载于:https://www.cnblogs.com/holbrook/archive/2012/02/19/2358710.html