现在我主要教大家如何去实战,做一个简易的知乎日报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.title class 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 serializers class 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 JSONRenderer class 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_exempt def 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_exempt def 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_exempt def 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
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月18日
2024年11月18日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】