课程名称 | IOS开发 | 任课老师 | 郑贵锋 |
---|---|---|---|
年级 | 16 | 专业(方向) | 软件工程(计算机应用方向) |
学号 | 16340132 | 姓名 | 梁颖霖 |
电话 | 13680473185 | [email protected] | |
开始日期 | 2019/4/21 | 完成日期 | 2019/4/24 |
服务端技术介绍
IM业务系统设计
Django
数据
计算
设计模式
数据的存储/转发/查找
常用的存储
RPC 远程过程调用
非关系型数据库
简单、性能高、横向扩展性高
关系型数据库
支持复杂的数据关系存储和查询
消息队列
解耦业务逻辑,削峰限流
抢红包业务,并发性高
利用序号
写扩散,消息投递队列(延时
小群大群 (优先级
消息的分级 例如红包 (优先级
这周就进入正式的开发环节,我们小组想要完成的是一个IM聊天工具,该应用需要较多的逻辑与服务器打交道,所以我们小组在最初期分配了两个同学来做服务器,两个同学先做前端页面的基础展示。
这里,经过我们小组的协商,我们打算用Django来进行这次后台开发的工具,所以在本周就学习一下Django这门技术,并尝试先定义几个简单的api接口提供使用。
Django 无需数据库就可以使用,它提供了对象关系映射器,通过此技术,我可以使用 Python 代码来描述数据库结构,这解决了数年以来在数据库模式中的难题。
这里有一个简单的例子,说明Django如何描述数据库结构的。
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self):
return self.full_name
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
分析:这里声明了两个表Reporter与Article,利用models.charField表明该变量是一个字符串类型,DateField表明该变量是一个日期类型,TextField表明该变量是一个文本类型,ForeignKey表明该变量是一个外键,并填入参数Reporter是它的外键变量,删除的模式是models.CASCADE,连带删除。
运行 Django 命令行工具来创建数据库表:
$ python manage.py migrate
这个 migrate
命令查找你所有可用的模型并将在数据库中创建那些不存在的表。
接下来,直接使用便捷而丰富的api来访问之前的数据,这些API是即时创建的,而不用显示的生成代码
>>> from news.models import Article, Reporter
>>> Reporter.objects.all()
<QuerySet []>
>>> r = Reporter(full_name='John Smith')
>>> r.save()
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is
cool',content='Yeah.',reporter=r)
>>> a.save()
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>
>>> r = a.reporter
>>> r.full_name
'John Smith'
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>
>>> r.full_name = 'Billy Goat'
>>> r.save()
>>> r.delete()
当你的模型完成定义,Django 就会自动生成一个专业的生产级管理接口 ——一个允许认证用户添加、更改和删除对象的 Web 站点。你只需简单的在 admin 站点上注册你的模型即可:
from django.contrib import admin
from . import models
admin.site.register(models.Article)
创建 Django 应用的典型流程是,先建立数据模型,然后搭建管理站点,之后你的员工(或者客户)就可以向网站里填充数据了。
为了设计你自己的URLconf ,你需要创建一个叫做 URLconf 的 Python 模块。这是网站的目录,它包含了一张 URL 和 Python 回调函数之间的映射表。URLconf 也有利于将 Python 代码与 URL 进行解耦。
from django.urls import path
from . import views
urlpatterns = [
path('articles//' , views.year_archive),
path('articles///' , views.month_archive),
path('articles////' , views.article_detail),
]
上述代码将 URL 路径映射到了 Python 回调函数(“视图”)。路径字符串使用参数标签从URL中“捕获”相应值。当用户请求页面时,Django 依次遍历路径,直至初次匹配到了请求的 URL。(如果无匹配项,Django 会调用 404 视图。) 这个过程非常快,因为路径在加载时就编译成了正则表达式。
一旦有 URL 路径匹配成功,Django 会调用相应的视图函数。每个视图函数会接受一个请求对象——包含请求元信息——以及在匹配式中获取的参数值。
例如,当用户请求了这样的 URL “/articles/2005/05/39323/”,Django 会调用 news.views.article_detail(request, year=2005, month=5, pk=39323)
。
$ django-admin startproject mysite
文件目录如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
这些目录和文件的用处是:
manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。mysite/
目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls
).mysite/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。mysite/settings.py
:Django 项目的配置文件。mysite/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。mysite/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。运行
$ python manage.py runserver
在浏览器打开http://127.0.0.1:8000/即可看到运行页面,此时表明开发环境已经搭建完毕。
处于 manage.py
所在的目录下,然后运行这行命令来创建一个应用:
$ python manage.py startapp polls
在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构.你的应用可以存放在任何Python path中定义的路径。
打开 polls/views.py
,把下面这些 Python 代码输入进去:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。为了创建 URLconf,请在 polls 目录里新建一个 urls.py
文件。
在 polls/urls.py
中,输入如下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在根 URLconf 文件中指定我们创建的 polls.urls
模块。在 mysite/urls.py
文件的 urlpatterns
列表里插入一个 include()
, 如下:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
访问页面http://127.0.0.1:8000/polls即可显示
注意后缀,因为我们设定的url是polls/
实现结果:
这周讲的是关于IOS服务器开发相关内容,一个好的IOS应用或者其他应用都离不开对服务器的访问,用作数据访问或者数据计算等。我们小组要做的是一个IM聊天工具,肯定也就离不开后台API的设计,所以这一节课也是十分重要的。经过组内的协商,我们打算用Djungo来进行后台开发,这个框架能简单的处理数据访问,加之用python语言来编写,代码量也不会太大,能把重点放回在IOS开发上。
这周我的工作就是在学习这个Djungo,写出几个简单的api,在IOS之前实验写过的网络访问来进行测试,能成功get或者post到服务器的信息,证明基本的开发环境已经配置成功了。下一步要做的就是跟组内多讨论一下接口的详情,先把基本的数据库表商量出来。