侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python采用Django制作简易的知乎日报API

Python  /  管理员 发布于 7年前   236

现在我主要教大家如何去实战,做一个简易的知乎日报API
首先你要熟悉django的基本用法,会写模型,会写视图函数,会配置url。

1.配置字符编码

因为我们等一下要使用中文,所以要先设好字符编码
在settings.py里将LANGUAGE_CODE设为'zh-CN'
然后添加这两行

FILE_CHARSET='utf-8'
DEFAULT_CHARSET='utf-8'

还要进入到数据库
依次输入

set character_set_client=utf8 ;set character_set_connection=utf8 ;set character_set_database=utf8 ;set character_set_results=utf8 ;set character_set_server=utf8 ;set character_set_system=utf8 ;

设置完成之后,输入

show variables like 'character%';

对照一下结果是否是这样

2.然后开始写模型

class News(models.Model):  created = models.DateTimeField(auto_now_add=True)  title = models.CharField(max_length=100)  image = models.CharField(max_length=100)  theme_id =models.IntegerField()  class Meta:    ordering = ('created',)  def __unicode__(self):    return self.titleclass NewsDetail(models.Model):  news = models.ForeignKey(News)  created = models.DateTimeField(auto_now_add=True)  content = models.CharField(max_length=1000)  image = models.CharField(max_length=99)  class Meta:    ordering = ('created',)  def __unicode__(self):    return self.news.title

这里不难理解,这里我分两层,第一层是概括,第二层是详细内容,然后以概括的作为外键
概括主要包含标题,配图地址和主题
详细内容包括内容和配图地址

3.将模式序列化

这是rest_framework非常强大的一点
在app里新建一个serializers.py,然后创建继承自ModelSerializer的类

from rest_framework import serializersclass NewsSerializer(serializers.ModelSerializer):  class Meta:    model = News    fields = ('id', 'title', 'image', 'theme_id')class NewsDetailSerializer(serializers.ModelSerializer):  class Meta:    model = NewsDetail    fields = ('id', 'image', 'content')

model为模型,fields为你想要查询显示的字段

4.然后再写视图函数

rest_framework.renderers中的JSONRenderer可以将对象渲染为json形式的字符串

from rest_framework.renderers import JSONRendererclass JSONResponse(HttpResponse):  """  用于返回JSON数据.  """  def __init__(self, data, **kwargs):    content = JSONRenderer().render(data)    kwargs['content_type'] = 'application/json'    content='{"news":'+content+'}'    super(JSONResponse, self).__init__(content, **kwargs)

我们在字符串外面在包一个news,这样获取比较方便

如何像知乎日报的那样获取最新的几个news呢

@csrf_exemptdef latest_news(request):  """  展示最新的10个news.  """  if request.method == 'GET':    news = News.objects.all()[:10]    serializer = NewsSerializer(news, many=True)    return JSONResponse(serializer.data)

因为返回的是一个集合所以NewsSerializer的many参数要设为True

返回某个主题的前几个news

@csrf_exemptdef theme_news(request,theme_id):  """  展示某个主题的前10个news.  """  if request.method == 'GET':    news=News.objects.filter(theme_id=theme_id)[:10]    serializer = NewsSerializer(news, many=True)    return JSONResponse(serializer.data)

返回某个id的news的详细内容

@csrf_exemptdef news_detail(request,news_id):  """  显示某个news的内容.  """  try:    news = NewsDetail.objects.get(news_id=news_id)  except Snippet.DoesNotExist:    return HttpResponse(status=404)  if request.method == 'GET':    serializer = NewsDetailSerializer(news)    # print serializer.data    return JSONResponse(serializer.data)

这里获取的是单个对象所以不用加many参数

5.配置url

urlpatterns = [  ...  url(r'^api/4/news/latest$', latest_news),  url(r'^api/4/news/theme/(?P<theme_id>[0-9]+)/$', theme_news),  url(r'^api/4/news/(?P<news_id>[0-9]+)/$', news_detail),]

括号包住的是要传入的参数,逗号后面的是匹配url成功后要执行的视图函数
括号里面有一些正则表达式,自己可以去百度搜一下怎么写

最后就可以把项目跑起来

效果如下



您可能感兴趣的文章:

  • 利用Python的Django框架中的ORM建立查询API
  • 教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
  • Python+Django在windows下的开发环境配置图解
  • python Django连接MySQL数据库做增删改查
  • python Django模板的使用方法(图文)
  • 教你安装python Django(图文)
  • 使用python搭建Django应用程序步骤及版本冲突问题解决
  • 使用python Django做网页
  • Python GAE、Django导出Excel的方法
  • Django1.7+python 2.78+pycharm配置mysql数据库教程


  • 上一条:
    快速入手Python字符编码
    下一条:
    Python正规则表达式学习指南
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客