加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 烧瓶上的slu field字段

发布时间:2020-12-20 12:31:13 所属栏目:Python 来源:网络整理
导读:我想创建一个存储在数据库中的slug字段. 我搜索了一下,我找到了http://flask.pocoo.org/snippets/5/,但是我在应用程序中集成代码时遇到了问题. 这是我的modele.py: from unicodedata import normalizedef slugfy(text,encoding=None,permitted_chars='abcde
我想创建一个存储在数据库中的slug字段.

我搜索了一下,我找到了http://flask.pocoo.org/snippets/5/,但是我在应用程序中集成代码时遇到了问题.

这是我的modele.py:

from unicodedata import normalize


def slugfy(text,encoding=None,permitted_chars='abcdefghijklmnopqrstuvwxyz0123456789-'):
    if isinstance(text,str):
        text = text.decode(encoding or 'ascii')
    clean_text = text.strip().replace(' ','-').lower()
    while '--' in clean_text:
        clean_text = clean_text.replace('--','-')
    ascii_text = normalize('NFKD',clean_text).encode('ascii','ignore')
    strict_text = map(lambda x: x if x in permitted_chars else '',ascii_text)
    return ''.join(strict_text)


class Chanteur(db.Model):
    id = db.Column(db.Integer,primary_key = True)
    nom = db.Column(db.String(200),index = True,unique = True)
    slug = db.Column(db.String(255))
    chanteurs = db.relationship('Chanson',backref = 'chanteur',lazy = 'dynamic')

    def __repr__(self):
        return '<Chanteur %r>' % (self.nom)

    def __setattr__(self,key,value):
        super(Chanteur,self).__setattr__(key,value)
        if key == 'nom':
            self.slug = slugfy(self.nom)


class Chanson(db.Model):
        id = db.Column(db.Integer,primary_key = True)
        titre = db.Column(db.String(255))
        chanteur_id = db.Column(db.Integer,db.ForeignKey('chanteur.id'))

        def __repr__(self):
            return '<Chanson %r>' % (self.titre)

它不起作用:当我添加一个新的objet(chanteur)时,slug字段是空的

解决方法

为了坚持数据库中的slug,我使用以下方法(使用非常有用的 python-slugify库):

from slugify import slugify  # among other things

class Song(db.Model):
    id = db.Column(db.Integer,primary_key = True)
    title = db.Column(db.String(255))
    slug = db.Column(db.String(255))

    def __init__(self,*args,**kwargs):
        if not 'slug' in kwargs:
            kwargs['slug'] = slugify(kwargs.get('title',''))
        super().__init__(*args,**kwargs)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读