Tag: django

使用Django rest框架开发iOS客户端应用

在过去的几年中,我一直在使用Parse作为我的应用程序的后端。 但是,这并没有给我真正的自下而上的感觉。 两年前,我开始使用Django(高级Python Web框架),但由于它的难度和完整性(学习基础知识的机会较少),我经常对此失去兴趣。 但是,在尝试了其他流行的后端语言(例如PHP和NodeJS)之后,我决定坚持使用Django一段时间。 Django的主要功能是其管理界面,该界面可帮助开发人员尽快编写应用程序! 一年多来,我用它来制作几个个人项目站点,包括我的投资组合。 由于我在应用开发方面(iOS和android)的丰富背景,我想通过使用Django后端开发客户端应用来挑战自己。 因此,我在今年初启动了一个小项目来学习。 在本文中,我将解释如何设置Django rest框架并为iOS客户端应用提供rest api端点。 Django Restframework是现代的Web Api套件,支持Python(2.7〜3.5)和Django(1.7〜1.9)。 对于searchrestaurant应用,我的目标是最初提供以下端点。 为此,我使用了Google Maps Geocoding来获取搜索地点的纬度和经度,并使用Foursquare API来获取相应地点的餐厅(比萨饼,咖啡等)。 使用Django restframework创建REST API的第一步是声明模型的序列化器类。 序列化器和反序列化器的目的是以json的形式获取检索/发送数据。 我在应用目录搜索下的文件serializers.py中创建了RestaurantSerializer。 下一步使用此序列化程序并在api端点被命中时提供json数据。 所有api端点均由views.py中的RestaurantList类使用urls.py中的url(r’^ api / v1 / $’,views.RestaurantList.as_view())处理 首先,解析get请求以获取诸如location和rtype(餐厅类型)之类的参数,然后查询现有数据库。 如果不存在数据,则同时使用Google API和Foursquare API生成一组新的查询。 Foursquare返回的数据将保存在数据库中,并使用serializers类返回到api端点。 提供的代码段如下。 典型的请求和响应对象如下所示。 要求: https://searchrestaurant.pythonanywhere.com/api/v1/?format=json&location=oslo&rtype=pizza 回应: 请注意,我们得到JSON Array作为响应。 如果找不到数据,我们将收到以下JSON对象的响应 {“错误”:“未找到”,“状态”:“ 404”}

使用Swift和Django Rest Framework将图像或文件上传到Django

最近几个月,我一直在开发开源Swift应用程序。 我需要使用rest框架将图像以及发布数据上传到Django。 虽然,有一些使用AF网络的Objective-C解决方案,但是我找不到一个很好的Swift解决方案。 使用Alamofire和Django rest框架非常简单。 我将解释以下步骤。 出于解释目的。 我将创建一个Django Model和序列化器类。 餐厅模型 REST API的餐厅序列化器 我们将在urls.py中添加rest api端点,并在views.py中添加逻辑。 在您应用的urls.py中添加以下内容。 url(r’^ api / v1 / list / new / $’,views.RestaurantList.as_view()) 我们都站在Django一方。 现在,是时候编写一些快速代码了。 首先,创建一个Podfile并添加pod’Alamofire’,’〜> 4.3.0’。 安装Pod之后,让我们创建一个多部分表单上传请求。 我不会编写用于从照片库中选择图像的其他代码。 您可以参考主存储库。 为此,您应该将Alamofire的上载api与多种格式的数据一起使用,因为我们要上载图像以及发布数据参数。 Django rest框架将负责其余的工作! 始终在其他参数之前为图像/文件添加multipartFormData 如有任何疑问,请随时在评论部分提问! 对于本博客,我假设:Swift 3.0,Xcode 8,Python 3.5,Django 1.10,Django Rest framework 4.0和Alamofire 4.0版本

无法使用Alamofire获取数据?

我想从我的Django后端获取iOS应用程序中的数据。 在postman中,如果我对以下URL http://127.0.0.1:8000/api/places/categories执行GET请求,参数是Key:"Authorization" Value: "Bearer access_token". 我得到一个JSON响应。 在我的应用程序内,我正在Alamofire的帮助下做这样的事情: let access_token = "123" let headers = ["Authorization": "Bearer" + access_token] Alamofire.request(self.categoriesUrl, method: .get, parameters:nil,encoding: JSONEncoding.default,headers: headers).response { response in print("Request: \(response.request)") print("Response: \(response.response)") print("Error: \(response.error)") if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) { print("Data: \(utf8Text)") } } 我收到错误说没有提供授权证书 。 我明白这一点,它要求我传递参数,但参数只需要一个令牌。 所以我做这样的事情: […]

处理所有的网站一次性根源静态文件,如favicon.ico可靠和优雅?

也许我错过了一些东西(我希望我是这样),但是要处理浏览器请求的一次性根网站文件,如favicon.ico和像apple-touch-icon这样的东西似乎非常笨重-precomposed.png(在iPad上)。 现在,我遇到一个500服务器错误,每当我遇到这些我没有明确提供一个文件。 我的问题: 是否有最新的所有主stream浏览器的这样的文件列表,我的web应用程序应该处理? 作为一个失败的安全,有没有办法让这些文件中的任何一个默默地失败,也就是说,如果Web应用程序继续其快乐的方式,不会得到一个500服务器错误,只需使用一个空白的favicon或什么? 我在Heroku上运行一个Django应用程序,用gunicorn。

curl-d到Alamofire

在这个页面( https://django-oauth-toolkit.readthedocs.org/en/latest/rest-framework/getting_started.html )之后,我能够为我的django项目设置OAuth。 下面的curl命令给我一个令牌来访问资源。 curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/ 但是,当我使用Alamofire发送请求时,事情有点奇怪。 这是我的代码 Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON) .authenticate(user: client_ID, password: client_Secret) where参数是一个字典 [ "password": <password>, "grant_type": password, "username": <username> ] 使用curl命令,我可以从Django看到request.POST.items()返回参数列表。 但是,使用Alamofire,没有什么。 参数出现在request.body中! 这个问题让我疯狂。 任何帮助将不胜感激! 提前致谢。

Django推送通知与设备自定义模型

我有一个关于Django推送通知的问题。 在我的Django项目中,我有我的移动设备模型。 在这个模型中,我拥有所有设备信息,如令牌(用于发送推送通知),设备平台(iOS或Android)以及其他设备信息。 现在我已经实现了发送这些推送通知的逻辑,我会使用一些类似django-push-notifications的库。 我已经阅读了文档,我意识到这个库已经在设备内部使用了一个模型:GCMDevice或者APNSDevice。 我如何使用我的设备模型使用django-push-notification? 有没有一个干净的方式来做到这一点?

在iOS上使用AWS Cognito控制AWS EC2访问(或不使用)

我有点难以理解如何使用IAMangular色来限制对Amazon EC2实例的访问。 我目前正在研究Cognito,我想知道它是否可以帮助我。 我想限制我的EC2实例(我的意思是联系那里的Django服务器)访问只有一个特定的人群,dynamicips。 所以IP限制不是一个选项。 如果用户通过Cognito进行身份validation并获得临时凭证,并因此假定具体的IAMangular色,我希望他能够从我的iOS应用程序中与该EC2-Django服务器通信。 如果对服务器的请求没有IAM,我希望Amazon自动阻止它。 这是可能的,或者我必须做那个服务器端?

处理来自IOS设备的请求时发生exception

我正尝试在iOS设备上播放video。 当我试图玩我得到以下错误: [27/Apr/2015 06:59:30] "GET /media/2015/04/VID_20150327_112644.mp4 HTTP/1.1" 200 18 Exception happened during processing of request from ('192.168.1.230', 51412) Traceback (most recent call last): File "/usr/lib/python2.7/SocketServer.py", line 593, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request self.RequestHandlerClass(request, client_address, self) File "/home/likewise-open/ZEALOUSYS/manesh/virtualenv/tracks/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 129, in __init__ super(WSGIRequestHandler, self).__init__(*args, **kwargs) File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__ […]

Djangoredirect到自定义URL

从我的Django应用程序,如何将用户redirect到somescheme://someurl.com? 为了给你一些上下文,以防万一它有帮助,我有一个用Python / Django编写的工作oauth2服务器,我需要允许用户注册具有自定义URLscheme的redirect_uris。 此自定义urlscheme用于处理本机应用程序内的redirect 。 我的第一反应是使用HttpResponseRedirect,但这个url有一个自定义的scheme,不是HTTP,所以我猜这不是我想要的。 预先感谢您提供的任何build议。 编辑:我没有尝试这个和Django正确返回响应redirect没有抛出一个错误,但浏览器不redirect到这个URL。 我正在使用Chrome来testing。 编辑2:HttpResponseRedirect在Safari浏览器中正常工作。

IOS原生应用程序registry上的CSRF保护?

我有一个使用Django作为后端的网站。 我现在正在开发一个IOS应用程序连接到相同的后端。 我打算使用Oauth2身份validationlogin和之后。 但是,我只是不知道该怎么做的registry格。 registry单将POST数据,如电子邮件,用户名和密码。 由于该应用程序没有csrf标记,因此会出现403错误。 如果我在注册视图上执行csrf_exempt,我不知道它有多安全。 我search现有的问题stackoverflow,但发现相冲突的答案。 有人说在登记表上需要csrf保护,有些人则说这不是必需的。 我想问一些问题。 1)获取这种registry格的最佳做法是什么? 2)如果需要csrf保护,那么如何实现呢? 如果有人能指出正确的方向,应该怎样做才能保证registry的安全以及最佳实践是什么,我真的很感激。 谢谢。