2024-12-01 02:09:00
导读:本篇文章首席CTO笔记来给大家介绍有关django怎么放class的相关内容,希望对大家有所帮助,一起来看看吧。
djangomodels.SlugField怎么使用SlugField字段是将输入的内容中的空格都替换成‘-’之后保存
Django官方文档中关于SlugField的描述如下:
classSlugField([max_length=50,**options])
Slug是一个新闻术语,通常是某些东西的短标签。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在URL里的。
像CharField一样,你可以指定max_length(也请参阅该部分中的有关数据库可移植性的说明和max_length)。如果没有指定max_length,Django将会默认长度为50。
SlugField字段的Field.db_index自动设置为True。
通常根据另一个值自动生成slug来填充到SlugField的值。你可以在admin中使用prepopulated_fields自动执行此操作。
可以重写save(),用slugfy方法转化数据后自动填充到SlugField中。简单示范如下
class?test(models.Model):
????q?=?models.CharField(max_length=30)
????s?=?models.SlugField()
????def?save(self,?*args,?**kwargs):
????????self.s?=?slugify(self.q)
????????super(test,?self).save(*args,?**kwargs)
一般多应用于URL正则表达式中的named?group,作为参数在视图和URL之间传递
django如何取到classpath目录
在python里有一个库叫os,其中有一个方法environ
os.environ['classpath'],这样就可以取得到classpath的目录了
貌似classpath应该是大写吧。
django传对象到前端class类型怎么取如果是django内置的模板引擎,
例如classA,实例a,a中的属性name,
则{{a}}为实例a,{{a.name}}为取name值
如何正确使用DjangoForms1.DjangoForms的强大之处
有些django项目并不直接呈现HTML,二是以API框架的形式存在,但你可能没有想到,在这些API形式的django项目中也用到了djangoforms.djangoforms不仅仅是用来呈现HTML的,他们最强的地方应该是他们的验证能力.下面我们就介绍几种和Djangoforms结合使用的模式:
2.模式一:ModelForm和默认验证
最简单的使用模式便是ModelForm和model中定义的默认验证方式的组合:
#myapp/views.py
fromdjango.views.genericimportCreateView,UpdateView
frombraces.viewsimportLoginRequiredMixin
from.modelsimportArticle
classArticleCreateView(LoginRequiredMixin,CreateView):
model=Article
fields=('title','slug','review_num')
classArticleUpdateView(LoginRequiredMixin,UpdateView):
model=Article
fields=('title','slug','review_num')
正如以上代码中看到的一样:
ArticleCreateView和ArticleUpdateView中设置model为Article
两个view都基于Articlemodel自动生成了ModelForm
这些ModelForm的验证,是基于Articlemodel中定义的field转换而来的
3.模式二,在ModelForm中修改验证
在上面的例子中,如果我们希望每篇articletitle的开头都是"new",那么应该怎么做呢?首先我们需要建立自定义的验证(validator):
#utils/validator.py
fromdjango.core.exceptionsimportValidationError
defvalidate_begins(value):
ifnotvalue.startswith(u'new'):
raiseValidationError(u'Muststartwithnew')
可见,在django中的验证程序就是不符合条件便抛出ValidationError的function,为了方便重复使用,我们将它们放在djangoapputils的validators.py中.
接下来,我们可以在model中加入这些validator,但为了今后的方便修改和维护,我们更倾向于加入到ModelForm中:
#myapp/forms.py
fromdjangoimportforms
fromutils.validatorsimportvalidate_begin
from.modelsimportArticle
classArticleForm(forms.ModelForm):
dev__init__(self,*args,**kwargs):
super(ArticleForm,self).__init__(8args,**kwargs)
self.fields["title"].validators.append(validate_begin)
classMeta:
model=Article
Django的editviews(UpdateView和CreateView等)的默认行为是根据view中model属性,自动创建ModelForm.因此,我们需要调用我们自己的Modelform来覆盖自动创建的:
#myapp/views.py
fromdjango.views.genericimportCreateView,UpdateView
frombraces.viewsimportLoginRequiredMixin
from.modelsimportArticle
from.formsimportArticleForm
classArticleCreateView(LoginRequiredMixin,CreateView):
model=Article
fields=('title','slug','review_num')
form_class=ArticleForm
classArticleUpdateView(LoginRequiredMixin,UpdateView):
model=Article
fields=('title','slug','review_num')
form_class=ArticleForm
4.模式三,使用form的clean()和clean_field()方法
如果我们希望验证form中的多个field,或者验证涉及到已经存在之后的数据,那么我们就需要用到form的clean()和clean_field()方法了.以下代码检查密码长度是否大于7位,并且password是否和password2相同:
#myapp/forms.py
fromdjangoimportforms
classMyUserForm(forms.Form):
username=forms.CharField()
password=forms.CharField()
password2=forms.CharField()
defclean_password(self):
password=self.cleaned_data['password']
iflen(password)=7:
raiseforms.ValidationError("passwordinsecure")
returnpassword
defclean():
cleaned_data=super(MyUserForm,self).clean()
password=cleaned_data.get('password','')
password2=cleaned_data.get('password2','')
ifpassword!=password2:
raiseforms.ValidationError("passwordsnotmatch")
returncleaned_data
其中需要注意的是,clean()和clean_field()的最后必须返回验证完毕或修改后的值.
5.模式四,自定义ModelForm中的field
我们会经常遇到在form中需要修改默认的验证,比如一个model中有许多非必填项,但为了信息完整,你希望这些field在填写时是必填的:
#myapp/models.py
fromdjango.dbimportmodels
classMyUser(models.Model):
username=models.CharField(max_length=100)
password=models.CharField(max_length=100)
address=models.TextField(blank=True)
phone=models.CharField(max_length=100,blank=True)
为了达到以上要求,你可能会通过直接增加field改写ModelForm:
#请不要这么做
#myapp/forms.py
fromdjangoimportforms
from.modelsimportMyUser
classMyUserForm(forms.ModelForm):
#请不要这么做
address=forms.CharField(required=True)
#请不要这么做
phone=forms.CharField(required=True)
classMeta:
model=MyUser
请不要这么做,因为这违反"不重复"的原则,而且经过多次的拷贝粘贴,代码会变得复杂难维护.正确的方式应当是利用__init__():
#myapp/forms.py
fromdjangoimportforms
from.modelsimportMyUser
classMyUserForm(forms.ModelForm):
def__init__(self,*args,**kwarg):
super(MyUserForm,self).__init__(*args,**kwargs)
self.fields['address'].required=True
self.fields['phone'].required=True
classMeta:
model=MyUser
值得注意的是,Djangoforms也是Python类,类可以继承和被继承,也可以动态修改.
结语:以上就是首席CTO笔记为大家整理的关于django怎么放class的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么放class的相关内容别忘了在本站进行查找喔。