2024-11-02 00:49:17
导读:今天首席CTO笔记来给各位分享关于django如何使用的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
[Django]如何在Django中使用前端工具链Django最大的不足在于其落后的前端工具链。现在前端开发几乎必备的包管理器(例如npm,yarn)以及工程化必备的webpack工具链,Django却不支持。Django开发的工作流中,后端的包管理可以用pip,而前端的包只能手动管理。所以,我最近的工程项目中,已不再使用Django提供的前端模块,仅仅把它当作API服务器。这的确很遗憾,因为Django的template引擎也有一些易用的特性,如此抛弃,真的有点不舍。那么有没有可能结合二者的优点呢?
经过一番探索,网上给出最靠谱的答案就是利用django-webpack-loader和webpack-bundle-tracker这两个插件。其原理是webpack-bundle-tracker能够输出webpack的编译过程以及结果。django-webpack-loader插件则是Django和webpack之间的桥梁,利用上面的编译结果,自动加载webpack打包后的静态文件。
需要用webpack生成的静态文件时,就在template上面使用下面一段模板语言,能够自动完成静态文件的注入。
简单的试了试,应该能够达到我想要的效果,明天有时间再研究。
如何正确使用DjangoForms
1.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类,类可以继承和被继承,也可以动态修改.
Python中Django如何使用?django1.9.5python3.4.4
文件结构
在一个爬虫脚本中将爬取的数据通过django自带的model保存到数据库
修改的文件(其余pycharm新建Django项目生成,未修改):
#testapp/models.pyfromdjango.dbimportmodels?classProblem(models.Model):??title=models.CharField(max_length=100,default="")??author=models.CharField(max_length=100,default="")???def__str__(self):???????returnself.title??pass#testapp/spider.pyimportosimportsysimportdjango?pathname=os.path.dirname(os.path.abspath(__file__))sys.path.insert(0,pathname)sys.path.insert(0,os.path.abspath(os.path.join(pathname,'..')))os.environ.setdefault("DJANGO_SETTINGS_MODULE","testproject.settings")?django.setup()?fromtestapp.modelsimportProblem?if__name__=="__main__":??p=Problem(title="hi",author="hi")??p.save()??pass#testproject/setting.py......INSTALLED_APPS=[??'django.contrib.admin',??'django.contrib.auth',??'django.contrib.contenttypes',??'django.contrib.sessions',??'django.contrib.messages',??'django.contrib.staticfiles',??#添加应用??'testapp',]......#testapp/admin.py在后台管理界面注册Problemfromdjango.contribimportadmin?#Registeryourmodelshere.?fromtestapp.modelsimportProblemadmin.site.register(Problem)
运行spider.py,添加一条实例记录
运行Django项目,创建管理员账号,后台管理界面查看结果
如何使用Django创建博客?如果您想开始写博客,又想使用功能强大的Web框架创建自己的博客,那么Django是您的最佳选择。目前该系列有14个教程,我仍在研究中,欢迎您给我更多的想法。
这些教程是:
为Django开发设置Vscode:在第一个视频中,您将学习如何在vscode文本编辑器上为Django建立开发环境。使用Django创建博客文章模型:该视频涵盖了为博客文章创建模型的所有细节,从标题,作者到标签。将富文本编辑器添加到Django项目:在这里,您将学习如何将富文本编辑器添加到表单或Django项目中的任何位置。
设计帖子页面:有关使用Bootstrap4设计详细帖子页面的快速教程。
创建详细信息帖子类视图:您将学习如何为博客帖子创建基于类的视图,它将允许您在自定义帖子页面的管理页面上使用自定义链接显示我们在管理页面中创建的帖子。
跟踪您的Django网站的访问者数量:我们将看到如何跟踪博客文章的访问量/浏览量。我们将使用一个工具,让您知道多少访客在您看到时看到您的帖子。另外,您将能够知道他们的IP地址和他们使用的用户代理。
在Django中添加要发布的评论:在本视频中,您将看到如何在博客应用中添加评论模型。因此,读者可以向您发送评论,这将很容易执行和管理。此外,您还将看到如何将注释计数添加到视图文件。
设计博客页面-引导程序:您将设计博客页面,其中将列出博客文章和其他元素。
Django博客列表视图:在本视频中,您将看到如何在博客页面上显示博客文章,我们将介绍如何通过在帖子模型中添加另一个属性来访问每个帖子的链接。此外,您还将看到如何在边栏中显示热门帖子和帖子类别。
Django3.1中的简单分页:此视频将仅介绍Django分页的下一个和上一个按钮。
Django搜索表单[带有Q对象的过滤器]:如何在Django博客网站中实现搜索功能
在Django中分页搜索结果:使用Bootstrap(CSS框架)创建简单的分页,然后将分页功能实现到Django搜索结果页面。
在详细信息帖子中添加类似的帖子小部件:将标记功能添加到我们的Django博客网站。
使用Django的简单用户身份验证系统:实现Django第三方应用程序,用户可以在其中注册,登录以及重设和更改密码。
结语:以上就是首席CTO笔记为大家介绍的关于django如何使用的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。