zoukankan      html  css  js  c++  java
  • python、django和pyamf

    最近是学了有关用pyamf来连接python和django的东东,所以把自己的一些学习的步骤与体会记下来。环境:python-2.7 django-1.5 pyamf-0.6

    第一部分:先建立一个admin,这个就按照<<djangobook2.0>>的步骤来做好了.

    建好的工程和app

     

    新建一个数据库onetest我用的是postgresql数据库

    把数据库设置一下在setting

     

    然后也是在setting中添加app

    在url.py

     

    models中

     1 # encoding=utf-8
     2 from django.db import models
     3 
     4 
     5 #定义出版商
     6 class Publisher(models.Model):
     7     #主键,id自增
     8     id=models.AutoField(primary_key=True) 
     9     #名字
    10     publisher_name = models.CharField( max_length=30 ,verbose_name = "名字")
    11     #地址
    12     publisher_address = models.CharField( max_length=50,verbose_name = "地址")
    13     #email
    14     psublisher_email = models.EmailField(blank=True)
    15     #禁用
    16     enable = models.IntegerField(default=0,blank=True,verbose_name = "禁用")
    17     
    18     def __unicode__(self):
    19         return self.publisher_name
    20     
    21     class Meta:
    22         verbose_name = "出版商"
    23         verbose_name_plural = "出版商"
    24         
    25         
    26 #定义作者
    27 class Author(models.Model):
    28     #主键,id自增
    29     id=models.AutoField(primary_key=True)
    30     #名字
    31     author_name = models.CharField(max_length=30 ,verbose_name = "名字")
    32     #地址
    33     author_address = models.CharField(max_length=50,verbose_name = "地址" )
    34     #email
    35     author_email = models.EmailField(blank=True)
    36     #禁用
    37     enable = models.IntegerField(default=0,blank=True,verbose_name = "禁用")
    38     
    39     def __unicode__(self):
    40         return self.author_name       
    41     
    42     class Meta():
    43         verbose_name = "作者"
    44         verbose_name_plural = "作者"    
    45      
    46         
    47 #定义书本
    48 class Book(models.Model):
    49     #主键,id自增 
    50     id=models.AutoField(primary_key=True)
    51     #名字
    52     book_name = models.CharField( max_length=30 ,verbose_name = "书名")
    53     #书作者
    54     books_author = models.ManyToManyField(Author, related_name="book_author_r")
    55     #书出版商
    56     book_publisher = models.ForeignKey(Publisher,related_name="book_publisher_r")
    57     #禁用
    58     enable = models.IntegerField(default=0,blank=True,verbose_name = "禁用")
    59     
    60     def __unicode__(self):
    61         return  self.book_name
    62     
    63     class Meta():
    64         verbose_name = "书本"
    65         verbose_name_plural = "书本" 

    在testapp中新建一个admin.py文件

    1 # encoding=utf-8
    2 from django.contrib import admin
    3 from models import *
    4 
    5 admin.site.register(Book)
    6 admin.site.register(Author)
    7 admin.site.register(Publisher)
    在命令行输入manage.py syncdb
    浏览器:(中文显示可以在setting里的LANGUAGE_CODE=‘en-us’换为'zh-CN')

     

     

     
     

     在testapp下建立gateway.py和publisher_action.py

    publisher_action.py:

     1 #encoding=utf-8
     2 from django.db import transaction
     3 from django.conf import settings
     4 import models
     5 
     6 import logging
     7 
     8 
     9 
    10 infoLog = logging.getLogger("info")
    11 errorLog = logging.getLogger("error")
    12 debugLog = logging.getLogger("debug")
    13 
    14 '''
    15 接口
    16     "publisher_name"=publisher_name,
    17     "publisher_address"=publisher_address,
    18     "publisher_email"=publisher_email,
    19     "enable"=enable,
    20 '''
    21 
    22 #新增publisher
    23 def insert(data = {}): 
    24     try:
    25         model = models.Publisher(publisher_name=data.get("publisher_name"),  publisher_address=data.get("publisher_address"),  publisher_email=data.get("publisher_email"),enable=data.get("enable"))
    26         if model.enable == None:
    27             model.enable=0
    28         model.save()
    29         return model.id
    30     except Exception,e:
    31         errorLog.error(e.message)
    32         return e
    33     
    34 #修改Publisher
    35 def update(data = {}):
    36     try:
    37         try:
    38             model = models.Publisher.objects.get(id=data.get("id"))
    39         except Exception,ge:
    40             errorLog.error(ge.message)
    41             return 0
    42         model.publisher_name=data.get("publisher_name")
    43         model.publisher_address=data.get("publisher_address")
    44         model.publisher_email=data.get("publisher_email")
    45         model.enable=data.get("enable")
    46         if model.enable == None:
    47             model.enable=0
    48         model.save()
    49         return model.id
    50     except Exception,e:
    51         errorLog.error(e.message)
    52         return None
    53     
    54 #删除Publisher
    55 @transaction.commit_manually
    56 def delete(datas = []):
    57     try:
    58         transaction.savepoint()
    59         try:
    60             for data in datas:
    61                 model = models.Publisher.objects.get(id=data.get("id"))
    62                 model.delete()
    63             transaction.commit()
    64             return len(datas)
    65         except Exception,de:
    66             transaction.rollback()
    67             errorLog.error(de.message)
    68             return 0
    69         return True
    70     except Exception,e:
    71         errorLog.error(e.message)
    72         return None

     gateway:

     1 #encoding=utf-8
     2 from pyamf.remoting.gateway.django import DjangoGateway
     3 import publisher_action
     4 import book_action
     5 
     6 
     7 services = {
     8     "publisher_action.insert":publisher_action.insert,
     9     "publisher_action.update":publisher_action.update,
    10     "publisher_action.delete":publisher_action.delete,
    11    
    12 }
    13 
    14 recGW = DjangoGateway(services, expose_request=False, debug=True)
    15 recGW.timezone_offset = 8 * 60 * 60 

     测试testing:

     1 # encoding=utf-8
     2 import logging
     3 
     4 logging.basicConfig(
     5     level=logging.DEBUG,
     6     format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'
     7 )
     8 
     9 from pyamf.remoting.client import RemotingService
    10 
    11 url = 'http://127.0.0.1:8000/gateway/'
    12 gw = RemotingService(url, logger=logging)
    13 service = gw.getService('publisher_action')
    14 
    15 def insert():
    16     print service.insert({"publisher_name":"xx","publisher_address":"xx","publisher_email":"123@123.com","enable":"0"})
    17     
    18 insert()

    运行testing就可以在admin中的publisher看到新增的字段。

     在testapp中新建一个book_action:

     1 # encoding=utf-8
     2 from django.db import transaction
     3 from django.conf import settings
     4 import models
     5 from models import Author
     6 from models import Book
     7 from models import Publisher
     8 
     9 import logging
    10 
    11 infoLog = logging.getLogger("info")
    12 errorLog = logging.getLogger("error")
    13 debugLog = logging.getLogger("debug")
    14 
    15 '''
    16 接口
    17 "book_name"=book_name,
    18 "books_author"=books_author,
    19 "book_publisher"=book_publisher,
    20 "enable"=enable,
    21 '''
    22 
    23 #新增publisher
    24 def insert(data = {}): 
    25     try:
    26         model = models.Book( book_name=data.get("book_name"),book_publisher_id=data.get("book_publisher_id"),enable=data.get("enable"))
    27         if model.enable == None:
    28             model.enable=0            
    29         model.save()
    30         
    31         a = Author.objects.get(id=data.get("books_author_id_1"))            
    32         c = Author.objects.get(id=data.get("books_author_id_2"))               
    33         b = Book.objects.get(id = model.id)                                
    34         b.books_author.add(a)     
    35         b.books_author.add(c)          
    36 
    37         return model.id
    38     except Exception,e:
    39         errorLog.error(e.message)
    40         return e

     testing修改为:

     1 # encoding=utf-8
     2 import logging
     3 
     4 logging.basicConfig(
     5     level=logging.DEBUG,
     6     format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'
     7 )
     8 
     9 from pyamf.remoting.client import RemotingService
    10 
    11 url = 'http://127.0.0.1:8000/gateway/'
    12 gw = RemotingService(url, logger=logging)
    13 service = gw.getService('book_action')
    14 
    15 def insert():
    16     print service.insert({"book_name":"xx","book_publisher_id":"1","books_author_id_1":"3","books_author_id_2":"4","enable":"0"})
    17     
    18 insert()

    运行testing,这样就可以看到新增的book字段与author有多对多的关系。可能页面会出现bug,重开浏览器就不会了。

  • 相关阅读:
    Catalan数
    完全背包
    日期问题
    01背包
    NOJ2076
    858. Prim算法求最小生成树
    839. 模拟堆
    850. Dijkstra求最短路 II
    849. Dijkstra求最短路 I
    859. Kruskal算法求最小生成树
  • 原文地址:https://www.cnblogs.com/fangyu19900812/p/3072912.html
Copyright © 2011-2022 走看看