简介:今天,首席CTO Note将与您分享如何在Django中使用自己的相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
如果您想开始写博客并使用功能强大的网络框架创建自己的博客,那么Django是您的最佳选择。目前,本系列中有14个教程。我仍在学习,欢迎您给我更多的想法。
这些教程是:
设置Django的VSCODE:在第一个视频中,您将学习如何在VSCODE文本编辑器上为Django建立开发环境。使用Django创建博客文章模型:此视频涵盖了创建博客文章模型的所有详细信息。从标题到作者到标签。
设计发布页面:关于Bootstrap 4设计设计设计的快速教程。
创建一个详细的信息发布课程视图:您将学习如何为博客文章创建基于类的视图。它将允许您在“自定义发布”页面的管理页面上使用自定义链接,以显示我们在管理页面上创建的帖子。
跟踪您的Django网站的访问者数量:我们将看到如何跟踪博客文章的访问/浏览数量。我们将使用工具来知道您在看到您的帖子时可以看到多少访问者可以看到您的帖子。将能够知道他们的IP地址和使用的用户代理。
添加注释要在Django中发布:在此视频中,您将看到如何在博客应用程序中添加评论模型。因此,读者可以向您发送评论,这将易于执行和管理。将注释添加到视图文件中。
设计博客页面指南计划:您将设计一个博客页面,该页面将列出博客文章和其他元素。
Django博客列表视图:在此视频中,您将看到如何在博客页面上显示博客文章。我们将介绍如何通过在邮政模型中添加另一个属性来访问每个帖子的链接。此外,您将看到如何在边境栏中显示流行的帖子和邮政类别。
Django 3.1中的简单分页:此视频只会介绍Django页面的下一个和上一个按钮。
Django搜索表[带有Q对象的过滤器]:如何在Django博客网站上实现搜索功能
django中的搜索结果:使用Bootstrap
将类似的帖子添加到详细信息中:将标记功能添加到我们的Django博客网站。
使用Django的简单用户身份验证系统:实现Django第三派对应用程序,用户可以注册,登录,更换和更改密码。
1.2后,Django支持使用多个DB。那么如何使用呢?
1.修改设置
01Databases = {
02'默认值':{
03'名称':'app_data',
04'引擎':'django.db.backends.postgresql_psycopg2',
05'用户':'Postgres_user',
06'密码':'s3krit'
07},,
08“用户”:{
09'名称':'user_data',
10'引擎':'django.db.backends.mysql',
11“用户”:“ mysql_user”,
12'密码':'priv4te'
13}
14}
15
16database_routers = ['path.to.myapprouter']
2.实现自己的数据库路由器,该路由器确定每个程序使用哪个DB。
01class myapprouter(对象):
02”路由器控制模型上所有数据库操作的路由器
03 MyApp应用程序“”“”“”“”
04
05 def db_for_read(self,model,**提示):
06“指向MyApp模型上的所有操作
07如果model._meta.app_label =='myApp':
08返回“其他”
09返回无
10
11 def db_for_write(self,model,**提示):
12“点上的MyApp模型的所有操作都可以'其他'”
13如果model._meta.app_label =='myApp':
14返回“其他”
15返回无
16
17 def laster_relation(self,obj1,obj2,**提示):
18“如果涉及MyApp中的模型,请允许任何关系”
19如果obj1._meta.app_label =='myApp'或obj2._meta.app_label =='myapp'
20返回正确
21返回无
22
23 def allow_syncdb(self,db,型号):
24“确保MyApp应用仅出现在'其他db”上
25如果db =='其他':
26返回模型._META.APP_LABEL =='myApp'
27 elif model._meta.app_label =='myApp':
28返回错误
29返回无
同步数据库时,默认值将同步到默认数据库。当然
[播放]查看平原复制打印?
tt class =“ xref std std std std djadminopt docutils fillal” style =“ text-design:none; white spie:nowrap; nowrap; color:rgb(35,79,50); margin section:0px; 0px; margin-righh:margin-righh:margin-righh:边界底宽:1px;边界底彩:RGB(35、79、50);边界Xyle:点缀;
$ https://www.shouxicto.com/article/manage.py syncdb -database =用户/tt
那么如何在程序中选择?
例如,以下代码将选择默认数据库
[python]查看普通复制打印?
跨度样式=“ font-family:monospace;颜色:#234f32;”#这将在“默认”数据库上运行。
rution.objects.all()
#这会。
rution.objects.using('默认值')。all()/跨度
但是以下代码将选择其他数据库
[python]查看普通复制打印?
跨度样式=“ font-family:monospace;颜色:#234f32;”#这将在“离子”数据库上运行。
wuter.objects.using('其他')。all()/跨度
以上是查询情况。
[python]查看普通复制打印?
跨度样式=“ font-family:monospace;颜色:#234f32;
删除时
[python]查看普通复制打印?
跨度样式=“ font-family:monospace;颜色:#234f32;”u = user.objects.using('legacy_users')。获取(用户名='Fred')
u.delete()#将从`lectacy_users的数据库/跨度删除
如果参数仅涉及模型本身的属性值,则可以直接在模板中调用它。请注意,不能用括号{{entry.def_name};(_ def_name)添加它,使用:{{entry.new_value}}
如果参数涉及其他变量,建议使用自定义模板过滤器(单独搜索);
如果您无法满足,建议更换模板模块。
以上基于python2.7 django1.11.18
1.安装Django
[播放]查看普通副本
CD Django-1.4
python setup.py安装
2.安装PostgreSQL的客户端:
[播放]查看普通副本
sudo apt-get安装-y postgresql-client-9.1 python-psycopg2
3.创建项目:
[播放]查看普通副本
django-admin.py startproject myproject
4.在myproject下创建一个新应用:
[播放]查看普通副本
python manage.py startapp myapp
4.添加的环境变量:
编辑/etc/profile文件,最后添加以下句子:
[播放]查看普通副本
跨度样式=“颜色:#ff0000;”导出pythonpath = $ pythonpath:/home/yc/src/myproject
导出django_settings_module = myproject.settings/span
5。
假设数据库是由Django的另一个应用程序(其他应用程序的名称)构建的。
192.168.1.23.有一个好数据库中的表格,名称为其他app_user,然后将otherapp/models.py复制到myApp
/models.py。
请注意,检查类meta:Models.py下的类用户类的一部分:如果没有Applabel标签,请添加:app_label ='其他应用程序'
在/home/home/yc/src/myproject下修改settings.py文件,如下:如下:
[播放]查看普通副本
数据库= {
'默认': {
'引擎':'django.db.backends.postgresql_psycopg2',#add'postgresql_psycopg2','mysql','sqlite3'或oracle'。
'name':'mydb',#'vps2db_test1'或数据库文件的路径,如果使用sqlite3。
“用户”:“ postgres”,#未与sqlite 3一起使用。
'密码':'123',#未与sqlite 3一起使用。
“主机”:'192.168.1.23',#设置为Localhost的空字符串。不适用于sqlite3。
'port':'5432',#设置为默认值的空字符串。不适用于sqlite3。
}
}
[播放]查看普通副本
instasted_apps =((
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'跨度样式=“颜色:#ff0000;”myapp/span',
治愈
6.在MyApp目录下编写测试程序
[python]查看普通副本
从型号导入用户
如果__名称__ ==“ __ main__”:
尝试:
u = user.objects.get(id = user_id)
除user.doesnotexist外:
打印“不存在的用户)
没有返回
别的:
返回你
许多Django应用程序需要执行异步任务,以免延迟HTTP请求的执行。我们还可以选择许多方法来完成异步任务。使用克莱里是一个更好的选择,因为克莱里
有了大量的社区支持,它可以完美扩展,与Django结合使用也很好。芹菜不仅可以在Django中使用,而且可以在其他地方使用。因此,一旦您学会使用克莱利,我
我们可以在其他项目中非常方便地使用它。
1.克莱里版本
这篇博客文章主要针对芹菜3.0.x。克莱里的早期版本可能有轻微的差异。
2. Cerry介绍
Clery的主要用途是执行异步任务。您可以选择扩展或定期执行功能。为什么需要执行异步任务?
首先,假设用户正在启动请求并等待返回请求。在此请求背后的视图函数中,我们可能需要执行长期的过程任务。目前,我们可能
它可能远大于用户公差的范围。当不需要立即执行此任务时,我们可以使用Clery在后台执行,而不会影响用户浏览Web。
当涉及到,我们通常无法确定它花费的时间。
第二个是定期执行常规任务。例如,您需要每小时检查天气预报,然后将数据存储到数据库中。我们可以编写此任务,然后让芹菜执行
Web应用程序可以获取最新的天气预报信息。
我们在这里谈论的任务是python函数(函数)。定期执行任务可以延迟执行此功能。我们可以使用Clery将功能延迟5分钟5分钟。
任务1并传递参数(1、2、3)。或者我们也可以每天午夜运行该功能。
我们偏向项目中的项目,这对于访问统一数据库和Django设置的任务很方便。
准备好任务后,芹菜会将其放在队列队列中。队列存储任务列表。我们可以使用多个队列,但是为简单起见,我们在这里只使用一个。
将任务任务放在队列中就像加入TODO列表一样。为了使任务运行,我们还需要在其他线程中运行艰苦的工作。工人观察实时行动的任务,然后一一运行。
一些任务。您可以在不同的服务器上使用多个工人。同样,为简单起见,我们只使用一个工人。
我们将在以后讨论队列,工人和另一个非常重要的过程。接下来,让我们这样做:
3.安装克莱里
我们可以使用PIP在vietualenv中安装:
PIP安装django-clery
4. Django设置
我们暂时使用Django Runserver来启动Clery。和芹菜代理,我们使用Django数据库代理实现。现在我们只需要知道克莱里芹菜
需要经纪人,您可以使用Django本身作为经纪人。(但是,当部署时,我们最好使用更稳定和高效的布拉克,例如Redis。)
在steratings.py中:
导入djcelery
djcelery.setup_loader()
broker_url ='django://'
Em
instasted_apps =((
Em
'djcelery',
'kombu.transport.django',
Em
治愈
第一个和第二个项目是必要的,第三个项目告诉芹菜将Django项目用作经纪人。
添加到installed_apps中的djcelery是必要的。kombu.transport.django是基于Django的经纪人
最后创建芹菜所需的数据表。如果您将South用作数据迁移工具,请运行:
python manage.py迁移
否则,运行:( Django 1.6或Django 1.7可以)
python manage.py syncdb
5.创建一个任务
如前所述,任务是Pyhton功能。但是芹菜需要知道此功能是任务,因此我们可以使用装饰器:@task。
在django应用程序目录中创建taske.py:
从芹菜导入任务
@任务 ()
def add(x,y):
返回x + y
当settings.py运行中的djcelery.setup_loader()时,Clery将在APPS Directory中的App Directory中的所有task.py文件中查看Appled_apps中的App Directory中的所有task Files,查找标记为任务的函数,并且预防。
将它们注册为Clery任务。
标记函数作为任务不会阻碍其正常执行。您仍然可以像往常一样称呼它:z = add(1,2)。
6.执行任务
让我们从一个简单的示例开始。例如,我们希望在用户发送请求并立即返回响应后执行任务异步,以免阻止请求,用户可以平稳访问
过程。然后,我们可以在Views.py的视图中使用.delay:
从myapp.tasks导入添加
Em
add.delay(2,2)
Em
克莱里将添加任务以排队并立即返回。在看到工人一侧的任务后,它将根据设置执行并将其从队列中删除。工人将执行以下一代。
代码:
导入myapp.tasks.add
myapp.tasks.add(2,2)
7.关于导入
应该注意的是,当IMPPRT任务时,它需要保持一致。因为执行djcelery.setup_loader()时,任务基于installed_apps中的应用程序名称。
添加.tasks.function_name进行注册。如果由于不同的Python路径而使用不同的参考方法(例如,使用MyProject.myapp.tasks在tasks.py中导入的the。
添加表单),Cerly不会知道这是同一任务,因此可能会导致奇怪的错误。
8.测试
A。开始工人
如前所述,我们需要一个工人来执行任务。以下是如何在开发环境中启动工人的方法:
首先启动终端,例如开发Django项目,激活Virtualenv,切换到Django Project目录。然后启动django构建的Web服务器:Python Manage.py Runserver。
然后开始工人:
python manage.py芹菜工人-loglevel =信息
目前,工人将在终端运行并显示输出结果。
b。开始任务
打开新终端,激活Virtualenv,然后切换到Django项目目录:
$ python manage.py shell
从myapp.tasks导入添加
add.delay(2,2)
目前,您可以看到工人在工作窗口中执行任务:
[2014-10-07 08:47:08,076:info/mainprocess]从经纪人获得任务:myapp.tasks.add [e080e047-b2a2a7-af74-af74-d7d98b02fc]
[2014-10-07 08:47:08,299:info/mainprocess]任务myapp.tasks.add [e080e047-b2a2-43a2-43a7-af74-af74-d7d98b02fc]
9.另一个例子
让我们看一个更真实的示例,即views.py和tasks.py:
#views.py
来自myApp.tasks导入do_something_with_form_data
def视图(请求):
form = someform(request.post)
如果form.is_valid():
data = form.clenet_data
#安排任务以稍后进行数据
do_something_with_form_data.delay(data)(数据)
返回render_to_response(...)
#tasks.py
@任务
def do_something_with_form_data(数据):
call_slow_web_service(data ['用户'],data ['text'],...)
10.调试
由于克莱里的操作需要启动多个组件,因此我们可能会错过一两个组件。因此,我们建议:
使用最简单的设置
使用Python调试和记录功能显示当前过程
11.渴望模式
如果在设置中的设置。py:
Celery_always_eager = true
然后芹菜以急切的模式运行,然后任务不需要添加延迟即可运行:
#如果启用了急切的模式,则以下两行代码是相同的
add.delay(2,2)
添加(2,2)
12.查看队列
因为我们将Django用作经纪人,所以排在Django数据库中的队列。这意味着我们可以通过Django管理员查看队列:
#admin.py
来自django.contrib导入管理
从kombu.transport.django导入模型为kombu_models
Admin.Site.Register(Kombu_models.message)
13.检查结果
运行异步任务后,芹菜将异步对象返回结果。您可以保存它,然后检查任务是否成功运行并返回结果:
#views.py
结果= add.delay(2,2)
Em
如果结果。dready():
打印“任务已运行”
如果结果。Successful():
打印“结果为:%s”%结果。
别的:
如果是isInstance(结果,例外):
打印“任务失败,原因是提出例外”
提高结果
别的:
打印“任务失败而没有提高例外”
别的:
打印“任务尚未运行”
14.常规任务
还有一种普通的牧师来执行常规任务。执行常规任务时,芹菜将通过芹菜过程完成。将维护芹菜。一段时间后,需要执行一定时间。
走路时,芹菜症将其添加到队列中。与工作过程不同,芹菜只需要一个。
启动CleryBeat:
python manage.py Clery Beat
有很多方法可以使芹菜执行常规任务。让我们先查看第一个,然后将常规任务存储在Django数据库中。即使在Django和Clery中运行的状态
方便地修改常规任务。我们只需要在设置中设置一个即可打开此方法:
#settings.py
Celerybeat_scheduler ='djcelery.schedulers.databasescheduler'
Django的最大缺点是其后端 - 端式工具链。Django不受几乎必要的袋装管理人员(例如NPM,YARN)的前端开发和工程链的必要WebPack工具链的支持。PIP可以使用后端软件包管理,并且前端袋只能手动管理。因此,在我最近的工程项目中,Django提供的前端模块仅被用作API服务器。确实是可惜的,因为Django的模板引擎也具有一些简单的功能,因此放弃确实有点不愿。因此,可以将两者的优势结合在一起吗?
经过一番探索,对互联网的最可靠答案是使用django-webpack-loader和webpack-bundle-tracker。原则是WebPack-bundle-tracker可以输出webpack.django-webpack-loader的编译过程和结果。插件是Django和WebPack之间的桥梁。使用上述汇编结果,WebPack之后的静态文件自动加载。
当您需要使用WebPack生成的静态文件时,请使用模板上的以下模板语言自动完成静态文件的注入。
只需尝试一下,您应该能够实现我想要的效果,并有时间明天学习。
结论:以上是为每个人编写的首席CTO注释,内容涉及如何在Django中使用其相关内容来回答和总结。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?