python和django_python、django和pyamf

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

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

建好的工程和app

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

把数据库设置一下在setting中

然后也是在setting中添加app:

在url.py中

models中

1 #encoding=utf-8

2 from django.db importmodels3

4

5 #定义出版商

6 classPublisher(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 returnself.publisher_name20

21 classMeta:22 verbose_name = "出版商"

23 verbose_name_plural = "出版商"

24

25

26 #定义作者

27 classAuthor(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 returnself.author_name41

42 classMeta():43 verbose_name = "作者"

44 verbose_name_plural = "作者"

45

46

47 #定义书本

48 classBook(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 returnself.book_name62

63 classMeta():64 verbose_name = "书本"

65 verbose_name_plural = "书本"

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

1 # encoding=utf-8

2 fromdjango.contrib import admin3 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 fromdjango.db import transaction3 fromdjango.conf import settings4 import models5

6 import logging7

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 #新增publisher23 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 returnmodel.id30 except Exception,e:31 errorLog.error(e.message)32 returne33

34 #修改Publisher35 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 returnmodel.id50 except Exception,e:51 errorLog.error(e.message)52 returnNone53

54 #删除Publisher55 @transaction.commit_manually56 def delete(datas =[]):57 try:58 transaction.savepoint()59 try:60 for data indatas:61 model = models.Publisher.objects.get(id=data.get("id"))62 model.delete()63 transaction.commit()64 returnlen(datas)65 except Exception,de:66 transaction.rollback()67 errorLog.error(de.message)68 return 0

69 returnTrue70 except Exception,e:71 errorLog.error(e.message)72 return None

gateway:

1 #encoding=utf-8

2 frompyamf.remoting.gateway.django import DjangoGateway3 import publisher_action4 import book_action5

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 logging3

4 logging.basicConfig(5 level=logging.DEBUG,6 format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'

7 )8

9 frompyamf.remoting.client import RemotingService10

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 fromdjango.db import transaction3 fromdjango.conf import settings4 import models5 frommodels import Author6 frommodels import Book7 frommodels import Publisher8

9 import logging10

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 #新增publisher24 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 returnmodel.id38 except Exception,e:39 errorLog.error(e.message)40 return e

testing修改为:

1 # encoding=utf-8

2 import logging3

4 logging.basicConfig(5 level=logging.DEBUG,6 format='%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s'

7 )8

9 frompyamf.remoting.client import RemotingService10

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,重开浏览器就不会了。

Python Django 是一个流行的 Web 框架,可以用于快速开发高质量的 Web 应用程序。在 Django 中,一个应用程序可以由多个模块组成,并且可以轻松地与其他应用程序集成。在这里,我将为您提供一些建议和指导,以帮助您开始使用 Django 构建学生管理系统。 1. 安装 Django: 首先,你需要安装 Django。你可以通过 pip 命令安装 Django,例如:`pip install django` 2. 创建一个 Django 项目: 接下来,你需要创建一个 Django 项目。你可以运行以下命令来创建一个名为 myproject 的新项目:`django-admin startproject myproject` 3. 创建一个 Django 应用程序: 接下来,你需要创建一个名为 students 的新应用程序。你可以运行以下命令:`python manage.py startapp students` 4. 配置数据库: Django 默认使用 SQLite 数据库。如果你想使用其他数据库(如 MySQL 或 PostgreSQL),你需要修改 myproject/settings.py 文件中的 DATABASES 设置。 5. 创建模型: 在 Django 中,模型是与数据库表对应的 Python 类。你需要在 students/models.py 文件中创建一个名为 Student 的模型,包括学生的姓名、年龄和成绩。 6. 进行数据库迁移: 在创建模型后,你需要运行以下命令来将模型同步到数据库中:`python manage.py makemigrations students`,然后运行 `python manage.py migrate` 命令进行数据库迁移。 7. 创建视图: 视图是 Django 应用程序中处理请求和生成响应的代码。你需要在 students/views.py 文件中创建一个名为 student_list 的视图,用于显示所有学生的列表。 8. 创建 URL: URL 是 Django 应用程序中的网址,它将请求路由到正确的视图。你需要在 students/urls.py 文件中创建一个 URL 模式,将 student_list 视图与 URL 路径关联起来。 9. 创建模板: 模板是 Django 中的 HTML 文件,用于呈现视图。你需要在 students/templates/students 目录中创建一个名为 student_list.html 的模板,用于显示学生列表。 10. 运行服务器: 最后,你可以运行以下命令来启动 Django 服务器:`python manage.py runserver` 这只是一个基本的概述,但它应该帮助你开始使用 Django 构建学生管理系统。如果你需要更详细的指导,请参考 Django 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值