日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

django使用graphql的實(shí)例

瀏覽:262日期:2024-09-22 15:46:52

一、開發(fā)環(huán)境

1、python3.6

2、django2.0

3、window10

二、項(xiàng)目搭建

1、創(chuàng)建一個(gè)虛擬空間mkvirtualenv 空間名

2、創(chuàng)建一個(gè)django項(xiàng)目

3、安裝graphql的依賴包

pip install graphene-django

4、創(chuàng)建一個(gè)組件blog

5、把組件blog及graphene_django注入到app中

6、在settings.py中配置mysql數(shù)據(jù)庫連接

三、書寫blog的內(nèi)容

1、在models.py中寫上數(shù)據(jù)模型

from django.db import models# Create your models here.class User(models.Model): name = models.CharField(max_length=100, verbose_name='博主名字') gender = models.CharField(max_length=6, choices=((’male’, u’男’), (’female’, ’女’)), default=’female’,verbose_name=’性別’) create_at = models.DateTimeField(auto_now_add=True, verbose_name=’創(chuàng)建時(shí)間’)class Blog(models.Model): title = models.CharField(max_length=100, verbose_name=’標(biāo)題’) user = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=’博主名字’) content = models.TextField(verbose_name=’博客內(nèi)容’) create_at = models.DateTimeField(auto_now_add=True, verbose_name=’創(chuàng)建時(shí)間’) update_at = models.DateTimeField(auto_now=True, verbose_name=’更新時(shí)間’)

2、新建一個(gè)schema.py文件

#!/usr/bin/env python# encoding: utf-8import graphenefrom graphene_django.types import DjangoObjectTypefrom .models import User, Blogclass UserType(DjangoObjectType): class Meta: model = Userclass BlogType(DjangoObjectType): class Meta: model = Blog# 定義動(dòng)作約素輸入類型class UserInput(graphene.InputObjectType): name = graphene.String(required=True) gender = graphene.String(required=True)class BlogInput(graphene.InputObjectType): title = graphene.String(required=True) user = graphene.Int(required=True) content = graphene.String(required=True)# 定義一個(gè)創(chuàng)建user的mutationclass CreateUser(graphene.Mutation): # api的輸入?yún)?shù) class Arguments: user_data = UserInput(required=True) # api的響應(yīng)參數(shù) ok = graphene.Boolean() user = graphene.Field(UserType) # api的相應(yīng)操作,這里是create def mutate(self, info, user_data): user = User.objects.create(name=user_data[’name’], gender=user_data[’gender’]) ok = True return CreateUser(user=user, ok=ok)# 定義一個(gè)創(chuàng)建博客的mutationclass CreateBlog(graphene.Mutation): class Arguments: blog_data = BlogInput(required=True) blog = graphene.Field(BlogType) def mutate(self, info, blog_data): # 插入到數(shù)據(jù)庫中 blog = Blog.objects.create(title=blog_data[’title’], user_id=blog_data[’user’], content=blog_data[’content’]) return CreateBlog(blog=blog)# 定義一個(gè)查詢語句class Query(object): all_user = graphene.List(UserType) all_blog = graphene.List(BlogType) def resolve_all_user(self, info, **kwargs): # 查詢所有book的邏輯 return User.objects.all() def resolve_all_blog(self, info, **kwargs): # 查詢所有title的邏輯 return Blog.objects.all()

3、在跟目錄(和settings.py同級(jí))創(chuàng)建一個(gè)項(xiàng)目的總schema.py

import grapheneimport book.schema, blog.schemaclass Query(blog.schema.Query, graphene.ObjectType): # 總的Schema的query入口 passclass Mutations(graphene.ObjectType): # 總的Schema的mutations入口 create_user = blog.schema.CreateUser.Field() create_blog = blog.schema.CreateBlog.Field()schema = graphene.Schema(query=Query, mutation=Mutations)

4、配置url地址

from django.contrib import adminfrom django.urls import pathfrom graphene_django.views import GraphQLViewfrom .schema import schemaurlpatterns = [ path(’admin/’, admin.site.urls), path(’graphql/’, GraphQLView.as_view(graphiql=True, schema=schema)),]

5、生成數(shù)據(jù)庫映射及啟動(dòng)項(xiàng)目,直接在瀏覽器上訪問

四、可以對(duì)上面的代碼調(diào)整

1、把Mutations也單獨(dú)定義在各自的schema.py中

# 定義一個(gè)總的mutation出口class Mutation(graphene.AbstractType): create_user = CreateUser.Field() create_blog = CreateBlog.Field()

2、在總的schema.py中引入類型Query一樣的操作

class Mutations(blog.schema.Mutation, graphene.ObjectType): # 總的Schema的mutations入口 pass

3、輸入數(shù)據(jù)類型可以直接定義在mutation里面

class CreateUser(graphene.Mutation): # api的輸入?yún)?shù)(類名可以隨便定義) class Arguments: name = graphene.String(required=True) gender = graphene.String(required=True) # api的響應(yīng)參數(shù) ok = graphene.Boolean() user = graphene.Field(UserType) # api的相應(yīng)操作,這里是create def mutate(self, info, name, gender): user = User.objects.create(name=name, gender=gender) ok = True return CreateUser(user=user, ok=ok)

五、Query語句中使用條件查詢

1、app的schema(官方案例)

import graphenefrom graphene_django.types import DjangoObjectTypefrom .models import Category, Ingredientclass CategoryType(DjangoObjectType): class Meta: model = Categoryclass IngredientType(DjangoObjectType): class Meta: model = Ingredient# 定義一個(gè)查詢class Query(object): # 定義一個(gè)根據(jù)id或者name查詢的 category = graphene.Field(CategoryType,id=graphene.Int(),name=graphene.String()) # 查詢?nèi)康?all_categories = graphene.List(CategoryType) # 根據(jù)條件查詢 ingredient = graphene.Field(IngredientType,id=graphene.Int(),name=graphene.String()) # 查詢?nèi)康?all_ingredients = graphene.List(IngredientType) def resolve_all_categories(self, info, **kwargs): return Category.objects.all() def resolve_all_ingredients(self, info, **kwargs): # We can easily optimize query count in the resolve method return Ingredient.objects.select_related(’category’).all() # 定義查詢語句 def resolve_category(self, info, **kwargs): id = kwargs.get(’id’) name = kwargs.get(’name’) if id is not None: return Category.objects.get(pk=id) if name is not None: return Category.objects.get(name=name) return None def resolve_ingredient(self, info, **kwargs): id = kwargs.get(’id’) name = kwargs.get(’name’) if id is not None: return Ingredient.objects.get(pk=id) if name is not None: return Ingredient.objects.get(name=name) return None

官網(wǎng)地址

補(bǔ)充知識(shí):記錄下python中使用定時(shí)器的幾種方法

方式一、直接使用while循環(huán)的方式

from datetime import datetimeimport time# 每n秒執(zhí)行一次def timer(n): while True: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) time.sleep(n)timer(5)

方式二、使用threading模塊中的Timer

from datetime import datetimefrom threading import Timer# 打印時(shí)間函數(shù)def print_time(inc): print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) ''' Timer的參數(shù)說明 inc:表示時(shí)間間隔 print_time:執(zhí)行的函數(shù) (inc,):傳遞給執(zhí)行函數(shù)的參數(shù) ''' t = Timer(inc, print_time, (inc,)) t.start()print_time(2)

方式三、使用sched模塊

import timeimport schedfrom datetime import datetime# 初始化 sched 模塊的 scheduler 類# 第一個(gè)參數(shù)是一個(gè)可以返回時(shí)間戳的函數(shù),第二個(gè)參數(shù)可以在定時(shí)未到達(dá)之前阻塞。schedule = sched.scheduler(time.time, time.sleep)# 被周期性調(diào)度觸發(fā)的函數(shù)def print_time(inc): print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) schedule.enter(inc, 0, print_time, (inc,))# 默認(rèn)參數(shù) 60 sdef start(inc=60): # enter四個(gè)參數(shù)分別為:間隔事件、優(yōu)先級(jí)(用于同時(shí)間到達(dá)的兩個(gè)事件同時(shí)執(zhí)行時(shí)定序)、被調(diào)用觸發(fā)的函數(shù)、給觸發(fā)函數(shù)的參數(shù)(tuple形式) schedule.enter(0, 0, print_time, (inc,)) schedule.run()if __name__ == '__main__': start(10)

方式四、使用apscheduler

from apscheduler.schedulers.blocking import BlockingSchedulerfrom datetime import datetimedef job(): print(datetime.now().strftime(’%Y-%m-%d %H:%M:%S’))if __name__ == '__main__': scheduler = BlockingScheduler() scheduler.add_job(job, ’interval’, seconds=5) scheduler.start()

以上這篇django使用graphql的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美一区在线| 99在线|亚洲一区二区| 日韩一区二区三区在线看| 亚洲久草在线| 国产夫妻在线| 久久亚洲美女| 麻豆精品国产91久久久久久| 久久中文视频| 国产精品巨作av| 欧美特黄a级高清免费大片a级| 欧美日韩一视频区二区| 午夜欧美巨大性欧美巨大| 亚洲日本国产| 日韩免费av| 国产免费播放一区二区| av一区二区高清| 精品久久精品| 蜜桃视频免费观看一区| 成人在线视频中文字幕| 亚洲综合福利| 99综合视频| 免费看av不卡| 国产精品探花在线观看| 国产亚洲毛片| 久久中文亚洲字幕| 国内揄拍国内精品久久| 日韩免费精品| 中文无码日韩欧| 午夜欧美精品久久久久久久| 日韩深夜视频| 伊人久久视频| av中文资源在线资源免费观看| 88久久精品| 亚洲一二三区视频| 香蕉久久夜色精品国产| 蜜臀av免费一区二区三区| 都市激情国产精品| 欧美13videosex性极品| 国产h片在线观看| 国产在线看片免费视频在线观看| 国产精品综合| 美女毛片一区二区三区四区最新中文字幕亚洲| 影音先锋久久精品| 蜜桃视频一区二区三区在线观看| 亚洲乱码视频| 久久不卡国产精品一区二区| 欧美国产三级| 久久久久国产精品一区三寸| 成人羞羞在线观看网站| 宅男噜噜噜66国产日韩在线观看| 综合激情在线| 精品久久亚洲| 日韩午夜av在线| 日韩福利视频一区| 精品国产亚洲日本| 亚洲天堂久久| 日本v片在线高清不卡在线观看| 国产精品片aa在线观看| 久久精品人人| 蜜臀av免费一区二区三区| 日韩一区二区三区高清在线观看| 精品一区二区三区视频在线播放| 久久精品国产亚洲夜色av网站 | 国产色综合网| 国产精品1区| 水野朝阳av一区二区三区| 国产高清亚洲| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费一级欧美片在线观看网站| 婷婷综合五月| 成人高清一区| 日韩不卡免费视频| 久久一级电影| 欧美好骚综合网| 日韩欧美2区| 亚洲精华国产欧美| 日韩精品电影| 久久久久伊人| 91精品国产自产在线丝袜啪| 91成人精品视频| 成人在线免费观看91| 国产亚洲第一伦理第一区| 欧美日韩少妇| 国产一区二区三区自拍| 久久精品毛片| 国产日韩一区二区三免费高清| 一本一道久久a久久精品蜜桃| 高清一区二区三区av| 欧美精品二区| 91麻豆精品激情在线观看最新 | 日韩高清三区| re久久精品视频| 久久婷婷丁香| 成人看片网站| 国产精品久久久久av电视剧| 97精品国产一区二区三区| 麻豆免费精品视频| 久久99国产精品视频| 欧美1区二区| 国产免费av国片精品草莓男男| 亚洲人成毛片在线播放女女| 99久久久久国产精品| 亚洲成a人片| 免费av一区| 蜜桃伊人久久| 亚洲精品大片| 午夜久久久久| 久久高清国产| 蜜桃久久av一区| 中文字幕中文字幕精品| 日本电影久久久| 国产精品久久久久久av公交车 | 激情国产在线| 亚洲手机在线| 亚洲性图久久| 蜜桃视频第一区免费观看| 69精品国产久热在线观看| 国产精品magnet| 欧美成人a交片免费看| 极品裸体白嫩激情啪啪国产精品| 婷婷综合社区| 国产日产精品一区二区三区四区的观看方式 | 国产一区二区三区久久久久久久久| 欧美激情aⅴ一区二区三区| 亚洲www啪成人一区二区| 国产亚洲午夜| 久久精品免费看| 欧美日韩一区二区三区视频播放| 性欧美精品高清| 欧美激情aⅴ一区二区三区| 色在线视频观看| 日本91福利区| 欧美亚洲国产激情| 日本在线观看不卡视频| 97精品视频在线看| 免费日韩av片| 久久久久免费| 日韩三级久久| 欧美午夜精彩| 国产精品v亚洲精品v日韩精品| 久久国产免费| 免费在线日韩av| 亚洲综合三区| 黑人精品一区| 国产亚洲一区二区三区啪| 午夜在线精品偷拍| 欧美日韩色图| 亚洲涩涩在线| 精品午夜av| 国产欧美三级| 午夜在线视频一区二区区别| 午夜精品成人av| 成人精品高清在线视频| 久久超级碰碰| 国产精品一区二区三区www| 综合激情网站| 中文久久精品| 欧美色图一区| 欧美天堂视频| 成人精品视频| 老司机精品视频在线播放| 亚洲三级精品| 免费在线观看视频一区| 免费视频亚洲| 午夜影院一区| 国产成人精品一区二区三区在线| 日韩免费精品| 日本91福利区| 欧美在线精品一区| 久久激五月天综合精品| 日本成人一区二区| 亚洲精品系列| 免费精品视频在线| 免费成人性网站| 亚洲综合福利| 国产欧美一区二区色老头| 日韩av二区在线播放| 亚洲制服少妇| 亚洲一区二区日韩| 青青伊人久久| 国产一区不卡| 色爱综合av| 久久要要av| 最新国产精品久久久| 日韩精选在线| 精品久久91| 99久久婷婷| 亚州av乱码久久精品蜜桃| 亚洲伊人精品酒店| 国产色噜噜噜91在线精品| 四虎8848精品成人免费网站| 欧美在线观看视频一区| 蜜桃视频一区二区三区| 麻豆精品视频在线观看免费| 日本免费久久| 国产一级一区二区| 日韩欧美精品| 亚洲一级网站| 日韩精品首页| 日本不良网站在线观看|