[Python #13] [Django #6] 搜索我的文章
hive-105017·@june0620·
0.000 HBD[Python #13] [Django #6] 搜索我的文章
pixabay https://cdn.pixabay.com/photo/2019/05/14/17/07/web-development-4202909_1280.png 今天解决一下我最需要的搜索我的文章功能。 先简单的实现搜索标签,标题,内容。 关键词定义为 dict,里面装tags,titles,texts三个条件,并都设置为list。 ``` query = { 'tags': [], 'titles': [], 'texts': [] } ``` 初步逻辑是,1)创建空list 2)从我的文章列表抽取包含关键词的文章并保存到这个list。 但是...问题多多。一旦不小心误判tags,titles,texts三项条件,就会造成保存同样的文章到list。 那如果不用list用集合怎么样呢?也有问题,因为集合无法装dict。 再一个代码的可读性会下降。 那把逻辑反过来呢? 就是从我的文章列表中删除掉不符合tags, titles, texts这三项条件的文章。比起第一个逻辑应该会好点。 1. 先获取我的文章列表,用副本循环。 2. 从列表删除不符合条件的文章。 * tags: query 与文章的标签都是list,可以用和交集来判断。再用not判断相反条件。 * titles: query为 list,文章标题为String,所以不得不用到循环,幸好用python的内部函数all可以轻松实现。 * texts: 同于titles。最后把三个条件用 and 连接即可。虽然 if 文有点长,无所谓了,因为我不是专业开发,哈哈。 👇 ``` import json from steem import Steem def tag_list(json_metadata: str): metadata = json.loads(json_metadata) if metadata: return metadata['tags'] else: return [] def search_blogs(query: dict, account: str = 'june0620'): s = Steem() blogs = s.get_blog(account, 0, 400) for blog in blogs[:]: blog_data = blog['comment'] title = blog_data['title'].lower() body = blog_data['body'].lower() tags = tag_list(blog_data['json_metadata']) q_titles = query['titles'] q_texts = query['texts'] q_tags = query['tags'] if not set(q_tags) & set(tags) and all(q_title not in title for q_title in q_titles) and all(q_text not in body for q_text in q_texts): blogs.remove(blog) return blogs ```  *** 主函数应该差不多了,简单测试了下没有发现问题。 那么,赶紧试试映射到网页吧。UI还没有实现,先简单的改之前的网页吧。关键词也用手动输入。👇 ``` query = { 'tags': ['django', 'music'], 'titles': ['온워드', '炸鸡腿'], 'texts': ['사랑하겠습니다', '몸빵잼'] } ```  *** 👇 成功了,换几个关键词也发现什么问题。我得赶紧做一个UI,享受我最需要的功能。 还有,待续高级搜索功能。  *** **[Cookie 😅]** Python 3.7.4 Django 2.2.4 steem-python 1.0.1 goorm IDE 1.3
👍 toni.pal, donekim, laissez-faire, koskl, nokodemion, roseofmylife, slowwalker, daath, moneytron, cpt-sparrow, kggymlife, itchyfeetdonica, kimzwarch, xiaoshancun, veronicalee, forecasteem, udabeu, magicmonk, cnbuddy, wisdomandjustice, mawit07, lindalex, wherein, steemfriends, tina3721, cnbuddy-reward, logicforce, coldhair, minloulou, andrewma, changxiu, cherryzz, andyhsia, real3earch, oldstone, cnstm, oldstone.sct, lianjingmedia, lotusofmymom, jsj1215, julialee66, lucky2015, lupafilotaxia, minigame, steem-agora, june0620, shenchensucc, bert0, josevas217, franyeligonzalez, memeteca, suhunter, melaniewang, zerofive, livingfree, hiveyoda, flamingirl, mangou007, glitterfart, starrouge, bji1203, dudream, coder-bts, tipu, happy-soul, kryptogames, jalentakesphotos, bcm, bartheek, jacuzzi, longer, satoshi-group, jim888, gghite, bluengel, realprince, victory622, sweetsssj, futurecurrency, city-of-dresden,