本文将告诉您如何编写django的前后 - 末端分离URL,以及Django前端和后端分离的相应知识点。我希望这对您有帮助。不要忘记收集此网站。
本文目录清单:
1. django前端 - 末端分离jwt登录2. VUE,django前后 - 端 - 端分离,开发开放式扇区(5)django,vue前后 - 端 - 端互动方法3. django+vue+vue前端和后端端端分离项目部署项目部署4.询问主DJANGO的URL配置问题5 5,Django媒体文件URL配置6.与Django中的路径和RE_PATH不同。1。打开项目中的设置配置
2.创建自定义的返回数据格式
创建新的utils.py并在用户应用程序目录中配置文件
2.在用户应用程序目录中创建并打开URLS.PY
3.打开邮递员
验证时,我们使用REST_FRAMEWORK框架,将在其他文档中详细描述。
@csrf_exempt必须有这个,否则将不会在全国范围内
编辑地平线/urls.py添加URL
下一个内容:Django调用OpenStack API(Keysstone)
后端使用的DRF是UWSGI+NGINX
输入服务器项目文件目录,我的django项目放置在“/usr/myprojects/” directory.create uwsgi.ini文件中的uwsgi.ini文件中。
测试效果命令:
如果您访问:xxx.xxx.xxx.xx:8000成功,那么uwsgi.ini配置成功
我的nginx.conf位置是“ /etc/nginx/nginx.conf”
配置文件如下:
1.第一行
主要是给予NGINX加权。部署历史记录路线后,将删除地址背后的“#”号码。包装部署后,将会有一个错误。
2.如果显示配置,则有两个服务器部署了前端服务和后端服务。值得注意的是,两台服务器使用同一服务器,这与侦听不同。
3. VUE部署需要注意反向代理地址:
和随后的端口问题
4.后端服务器需要注意该位置的UWSGI_Pass后面的最终口号。
5.交叉 - 域问题。如果我需要在自己的在线上找到配置,我没有遇到它,因为我在Django的设置中配置了交叉域。
6. Django Suit背景管理样式已经崩溃,需要更改,但是可以正常访问API。
7.我开始在后台收听端口8008,并在前端监视端口80中听,以便前端显示出良好的外观。尽管可以正常访问背景API,但VUE的本地开发环境也可以正常运行,并且文本和图片资源都正常显示。结果,它无法显示。对于地图,我选择了前面- 末端监视器以收听端口8008,后端监视80,并且显示后显示正常。原因尚不清楚////////// erly谈论它。
8.不要问我为什么我将前端和后端分开并在服务器上部署?糟糕,只是测试,这不是必需的
9.本文仅适合入门
关于Django的后台管理员(西装)修改(参考:Django中文网站:)
在环境中输入项目目录,您需要收集CSS样式并在终端中输入命令:
接下来,您可以找到静态文件包含CSS文件。此时,该网站已打开,样式显示正常
UWSGI启动xxx.ini后,将在同一目录中生成xxx.pid文件。UWSGI主要过程的过程数中只有一行内容。
关于UWSGI,输入同一目录
课
如果您无法获得环境,请指定环境
另外:请记住重新启动UWSGI并重新启动NGINX。
暴力删除:Fuser -K 80/TCP
Netstat -aptn命令行,检查所有开放端口号码
netstat -tlp |GREP 80查看是否使用了特定端口
PS -EF |grep uwsgi查看是否存在UWSGI端口
流链接功能导入
1:直接导入视图功能
来自django.conf.urls.defaults导入 *
从mysite.views导入hello
urlpatterns =模式('',,
(r'^hello/$',你好),
(r'^time/$',时间),
治愈
2:在介绍软件包模块的名称和函数的功能中,而不是函数本身
来自django.conf.urls.defaults导入 *
从缅甸进口视图
urlpatterns =模式('',,
(r'^Hello/$','views.hello'),
(r'^time/$','views.time'),
治愈
3:无需导入任何视图内容,写出字符串的清晰描述
来自django.conf.urls.defaults导入 *
urlpatterns =模式('',,
(r'^Hello/$','mysite.views.hello'),
(r'^time/$','mysite.views.time'),
治愈
4:提取公共视图前缀
来自django.conf.urls.defaults导入 *
urlpatterns =模式('mysite.views',
(r'^Hello/$','Hello'),
(r'^time/$','time'),
治愈
5:partterns()返回对象的添加到对象
老的:
来自django.conf.urls.defaults导入 *
urlpatterns =模式('mysite.view',,
(r'^Hello/$','Hello'),
(r'^time/$','time'),
(r'^other/$','mysite.othother.oth'),
治愈
新的:
来自django.conf.urls.defaults导入 *
urlpatterns =模式('mysite.view',,
(r'^Hello/$','Hello'),
(r'^time/$','time'),
治愈
urlpatterns +=模式('mysite.OthoShts',,
(r'^other/$','其他'),
治愈
6:到目前为止,在所有URLCONF示例中,我们都非常简单,即
如果您要捕获的URL零件并添加小括号,Django将将捕获的文本传递到视图函数。
在高级用法中,您还可以使用“命名”正则表达组捕获URL并将其作为“关键字”参数传递给视图。
在Python正则表达式中,正则表达组的语法(?pnamepatrn)是该组的名称,而模式是一种匹配模式。
以下是使用未知组的URLCONF的示例:
来自django.conf.urls.defaults导入 *
从缅甸进口视图
urlpatterns =模式('',,
(r'^arcticles/(d {4})/$',views.year_archive),
(r'^arcticles/(d {4})/(d {2})/$',view.moth_archive),
治愈
以下是相同的URLCONF,它重写了命名组:
来自django.conf.urls.defaults导入 *
从缅甸进口视图
urlpatterns =模式('',,
(r'^arcticles/(?pyeard {4})/$',veiws.year_archive),
;
治愈
如果您不带命名组,请求/Arcticle/2006/03 //将等于此功能呼叫:
month_archive(请求,'2006','03')
对于命名组,相同的请求就是这样的函数调用:
month_archive(请求,年='2006',月= '03')
可以看出,使用命名组可以使您的urlconf更清晰,减少参数顺序可能与潜在的错误混合在一起,
您还可以对定义中的参数进行排序。
7:查看冗余:
#urls.py
来自django.conf.urls.defaults导入 *
从缅甸进口视图
urlpatterns =模式('',,
(r'^(foo)/$',views.foobar_view),
(r'^(bar)/$',views.foobar_view),
治愈
#views.py
来自django.shortcuts导入render_to_response
从mysite.models导入mymodel
def foobar_view(请求,URL):
m_list = mymodel.objects.filter(is_new = true)
如果url =='foo':
template_name ='Template1.html'
elif url =='bar':
template_name ='Template2.html'
return render_to_response(template_name,{'m_list':m_list})
使用上述方法可以减少视图冗余
8:固定参数传递到URL:
#urls.py
来自django.conf.urls.defaults导入 *
从缅甸进口视图
urlpatterns =模式('',,
(r'^foo/$',views.foobar_view,{'template_name':'template1.html'}),
(r'^bar/$',views.foobar_view,{'template_name':'template2.html'}),
治愈
#views.py
来自django.shortcuts导入render_to_response
从mysite.models导入mymodel
def foobar_view(请求,template_name):
m_list = mymodel.objects.filter(is_new = true)
return render_to_response(template_name,{'m_list':m_list})
一些URL参数的详细说明:
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
以上是我们可以以不同方式实施的三个URL
1 :( r'^mydata/(/w {3})/(/d/d)',views.mydata)mydata(请求,'jan','01')
2:(r'^mydata/(?pmonth/w {3})/(?pday/d/d)',view.mydata)mydata(请求,月='jan',day',day ='01')
3 :( r'^mydata/birthday/$',views.mydata,{月:'jan',day:'01'})mydata(请求,月='jan',day = '01')
9:包括导入:
来自django.conf.urls.defaults导入 *
urlpatterns =模式('',,
(r'^weblog/',包括('mysite.blog.urls'),
(r'^photos/',包括('mysite.photos.urls'),
(r'^of/$','mysite.views.about'),
治愈
10:示例:
验证用户是否已登录:
以下是三个观点
def my_view1(请求):
如果未request.user.is_authenticated():
返回httpresponseredirect('/accounts/login/')
#...
返回render_to_response('template1.html')
def my_view2(请求):
如果未request.user.is_authenticated():
返回httpresponseredirect('/accounts/login/')
#...
返回render_to_response('template2.html')
def my_view3(请求):
如果未request.user.is_authenticated():
返回httpresponseredirect('/accounts/login/')
#...
返回render_to_response('template3.html')
以下是视图上的包装:
deficuires_login(查看):
def new_view(请求, *args,** kwargs):
如果未request.user.is_authenticatienatienationed():#如果用户未登录,请跳到登录接口
返回httpresponseredirect('/accounts/login/')
返回视图(请求, *args,** kwargs)#otherwise
返回new_view #turn to new_view值:登录视图或查看视图
以下是URL配置:
来自django.conf.urls.defaults导入 *
来自mySite.views import oneques_login,my_view1,my_view2,my_view3
urlpatterns =模式('',,
(r'^view1/$',quirenes_login(my_view1)),
(r'^view2/$',quirenes_login(my_view2)),
(r'^view3/$',quirenes_login(my_view3)),
治愈
在Django中,您通常需要配置图片,视频和其他格式文件。在配置过程中,它更为复杂。这是一个记录:
将以下目录添加到文件末尾以存储上传的文件
在模型中,图像字段是%y代表年份的年份,%m表示一个月。上传文件时,表示将上传到图像目录和当前限制目录的文件夹。
image = models.imagefield(upload_to =“ image/%y/%m”,空白= true)
其中,SRC中的{{Media_url}}将在模板中渲染,以用作 /媒体 /
如果要在模板中使用{{Media_url}},请在“ template”的“ context_processis”选项中添加django.template.contexors.media。
通过上述步骤,结果基本上可以正常呈现在前端,但是您需要在图片中添加一个URL才能正常显示。
第一个行为介绍了静态文件的服务器,第二个行为是在配置文件中的介质_root中介绍的
加入URL:
初学者通常无法区分两者之间的差异。在此简要介绍下,URL是Django 1.x的写作。p在django2.1中,它开始放弃django1.x.in django2.x中的URL写作,path and re_path.re_path()函数描述了URL配置的两个函数。可以将其视为Django 1.X中的URL函数,也就是说,您可以在路径中定期使用。
路径和URL是两个不同的模块。效果是响应返回页面。路径调用python第三 - 方模块或框架,URL是自定义模块,例如视图下的DEF函数对应于您的URL中的参数值,然后,然后
例如:
settings.py文件中有一个root_urlconf设置,该文件设置为匹配哪个URL文件在访问URL时用于匹配网站。
url或re_path应该复杂(r'^blog/(?p [0-9] {4})/')首先需要启动和结束结束符号)结束字符,匹配a()的参数是匹配的参数范围,
(?p匹配字段名称正则表达式)
参数和域名是否不包含get或post请求方法,例如不匹配?
您可以为请求参数设置默认值
自定义错误页面关键字handler400 = blog.views.page_no_find
如何使用参数路径(“ blog/str:string/”)要简单得多,也就是说,洒水,正面是str的类型代表参数,以及后面参数的参数名称
捕获URL中的参数需要使用括号中的值类型,以指定括号中的值类型,例如int:astr:link,有很多类型,例如:
如果不足以定义路径和转换器语法的URL模式,则需要使用正则表达式。目前,您需要使用re_path()而不是路径()。
示例:传递数字数的参数
在python3中使用django2时,设置URL时,您会遇到一些坑。在此处记录。
在系统的urls.py中,使用1.x的URL方法。
在2.0中,它建议使用路径模块,因此在此处重写。引用
注意:
1. thex中的写作是
当前写作
在此比较中可以理解这一点,使用的链接是:钥匙= ABC
1.x写作方法
但是在2.0中,您以这种方式编写,您将报告一个错误,什么App_name,您可以自己看到,如何解决它,实际上非常简单。只要您在自己的项目urls.py中添加此句子。如果您不添加ITAN错误,
笔记:
让我们谈谈如何写关于如何编写前端和后端的Django的URL。感谢您阅读本网站的内容。有关django如何与django前后django的前后分离的更多信息。