Django笔记5–隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

您所在的位置:网站首页 pyahocorasick安装 Django笔记5–隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

Django笔记5–隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

2023-01-02 11:54| 来源: 网络整理| 查看: 265

1、隐藏真实的静态文件路径 {% load static from staticfiles %}

通常情况下,当在.html文件中访问服务器下的静态文件时,如:img标签通过src属性获取服务器内的图片,link获取写好的css文件,script获取js文件等等,通常会在src属性里写入静态文件真实的文件路径,此时在浏览器中查看网页源代码,也可以通过src看到这些文件真实的文件路径。为保护服务器文件的安全,我们可以对真实的静态文件路径进行隐(wei)藏(zhuang)。

静态文件路径隐藏–使用 STATICFILES_DIRS 1、修改settings.py文件中的static路径

将settings.py文件中的 STATIC_URL 对应的路径修改成任意想要显示的虚假路径:

STATIC_URL = ‘/static/’ ==> STATIC_URL = ‘/hello/’

然后需要当访问静态文件时,先访问假的hello文件路径,然后再提供真正的路径:

STATICFILES_DIRS = [os.path.join(BASE_DIR,”static”)]

完整代码如下:

STATIC_URL = '/hello/' STATICFILES_DIRS = [os.path.join(BASE_DIR,"static")] 2、修改html访问静态文件的代码

此时,如果要访问统一静态文件夹static下的静态文件,伪装前的url写成:

< img src="/static/imgs/2.jpg" alt="">

而现在可以写成:

{% load static from staticfiles %} < img src="{% static '/imgs/2.jpg' %}" alt="">

↑↑↑注意 更新↓:在Django3.0版本之后,这些使用方式

{% load staticfiles %} {% load static from staticfiles %} {% load adminstatic %}

都已经不再使用,而是统一都使用一行:

{% load static %}

来代替这些语句,所以如果你使用的Django版本在2甚至3以上,推荐写成:

{% load static %} < img src="{% static '/imgs/2.jpg' %}" alt="">

伪装后访问网页,并查看源代码:

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器可以看到真实的 /static/imgs/

路径就会被替换成伪装后的虚假路径:

/hello/imgs/

其中网页源代码如下:

DOCTYPE html> Statictitle> {% load static from staticfiles %} head> body> html>

项目路径展示:

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

这里返回网页的视图函数,及调用函数的路由配置相关代码不多赘述。

2、上传图片 I、后台上传图片 ①、指定上传的访问路径MEDIA_URL、存储路径MEDIA_ROOT

在settings.py文件中,添加指定上传的访问路径MEDIA_URL、存储路径MEDIA_ROOT:

MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")

注意:1、提前在static文件夹中 创建好指定的media(名字自定义)文件夹,用于服务器存放后台上传的文件2、MEDIA_URL中的访问路径,前后有 /

②、配置主路由

在settings.py文件同级目录里的urls.py中配置:

1、引入settings

from django.conf import settings

2、将MEDIA_URL 指向 MEDIA_ROOT

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) ③、创建模型

myapp文件夹下的models.py文件中添加模型PostImg:

class PostImg(models.Model): picture = models.ImageField(upload_to='avatar', verbose_name='图片') class Meta: verbose_name_plural = '上传图片'

upload_to即保存到某个文件中,文件夹若不存在则自动创建。

⑤、注册模型(用于后台显示)

myapp文件夹下的admin.py文件中注册模型PostImg:

admin.site.register(PostImg) ⑥、生成迁移文件与迁移(使创建好的模型转换成数据表)

在terminal窗口下执行生成迁移文件命令:

python manage.py makemigrations

执行成功后,继续执行迁移命令:

python manage.py migrate ⑦、启动django服务,登录后台

在terminal窗口下执行启动django服务命令:

python manage.py runserver

执行成功后,浏览器访问http://127.0.0.1:8000/admin/

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器登录成功后可以看到MYAPP下,创建并注册好的上传图片模型PostImg:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器点击 +增加 ,选择文件并保存:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器保存成功:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器在MySQL数据库中查看上传的a.jpg,a.jpg保存到了upload_to指定的avatar文件夹中:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器PyCharm中查看后台上传的a.jpg:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器 II、客户端页面form表单上传图片 1、在html页面创建form表单

设置表单属性

action="/myapp/upload" # 表单提交的路由 method="post" # 请求方式设置为post请求 enctype="multipart/form-data" # 使form表单能够上传文件 {% csrf_token %} 选择文件: form> 2、编写视图函数,返回html页面

路由调用视图函数时,判断请求类型,若为第一次请求–GET请求,返回form表单页面若为form表单提交的POST请求,则获取上传的图片内容,保存到服务器中。视图函数代码myapp/views.py:

def uploadimg(request): if requesthod == 'GET': return render(request,'myapp/uploadimg.html') elif requesthod == 'POST': img_obj = request.FILES.get('avatar') from django.conf import settings fpath = os.path.join(settings.MEDIA_ROOT,img_obj.name) with open(fpath,'wb') as f: data = img_obj.file.read() f.write(data) return HttpResponse("上传成功!") 3、配置访问路由(myapp/urls.py) url(r'^upload', uploadimg) 4、客户端访问路由 http://127.0.0.1:8000/myapp/upload

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器上传b.jpg图片Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器form表单向http://127.0.0.1:8000/myapp/upload提交图片成功,并接收到HttpResponse(“上传成功!”):Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器查看项目文件夹中存放路径:Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器b.jpg在服务器项目文件中保存成功。 ; 3、富文本编辑器

编辑文本时,单纯的写入文字可能并不能满足使用要求,或者我们需要使文本文字拥有更多样式时,我们可以选择使用富文本编辑器来实现编辑文本时的各种需求。

①、安装django-tinymce库 Terminal运行:X:\xx\xxx> pip install django-tinymce

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器 ②、settings.py文件添加tinymce应用

在INSTALLED_APPS这添加注册应用:

'tinymce',

并修改tinymce的默认配置(按需修改):

TINYMCE_DEFAULT_CONFIG = { 'theme':'silver', 'language':'zh_CN', 'menubar':'edit format', 'plugins': 'lists,advlist bold underline alignleft aligncenter alignright fontselect fontsizeselect code image link table', 'toolbar': 'bullist numlist bold underline alignleft aligncenter alignright fontselect fontsizeselect code image link table', 'images_upload_url': '/uploadImg/', 'width':800, 'height':400 } ③、在models.py文件里的模型中 引用富文本编辑器

先从tinymce.models中导入HTMLField:

from tinymce.models import HTMLField

使用:

content = HTMLField(verbose_name='内容') ④、配置主路由urls.py

先从django.conf.urls中导入include

from django.conf.urls import url, include

然后在主路由中添加:

url(r'^tinymce',include("tinymce.urls")),

此时启动django服务,并访问服务器在添加模型数据时就可以看到使用的富文本编辑器:

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器 可能报错?:

from django.urls import pathImportError: cannot import name ‘path’ from ‘django.urls’

出现这个错误是因为django-tinymce和当前使用的django版本差异导致的,tinymce使用path为2版本,而当前项目使用的django可能是使用url的1版本

解决:

根据报错提示的X:\xxx\xxx\site-packages\tinymce\urls.py,找到该urls.py文件将原来的:

from django.urls import path

修改为:

from django.conf.urls import url

并将该文件中所有使用的path该为url(一般就四个)

4、富文本编辑器中添加图片

有时编辑文本时,除了丰富的文本样式,我们可能还需要编写图文文本;而正好django-tinymce库中的富文本编辑器也提供了文本中插入图片的功能:

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器如果是普通方式则无需配置服务器若选择本地上传至富文本编辑器,则需要服务器对该功能进行对应配置,以使该图文文本保存时,服务器能够保存上传的对应图片。 ; 本地上传图片至 富文本编辑器 ①、settings.py文件同级目录中新建一个py文件

如名为utils.py,该文件主要在客户端确认上传图片时,主路由能够调用该文件中的对应处理函数。utils.py代码配置如下:

import os from datetime import datetime from django.conf import settings from django.http import JsonResponse def uploadImg(request): imgObj = request.FILES.get('file') imgName = str(int(datetime.today().timestamp())) + imgObj.name imgPath = os.path.join(settings.MEDIA_ROOT, imgName) with open(imgPath, 'wb') as f: data = imgObj.file.read() f.write(data) return JsonResponse({ 'location': '/media/' + imgName })

其中static路径设置见上文 1、

②、配置主路由urls.py

先从新建的utils.py文件中导入编写好的uploadImg函数:

from .utils import uploadImg

编写路由,urlpatterns列表中添加:

url(r'^uploadImg', uploadImg), ③、CSRF报错?:

上传图片默认为POST请求,需进行CSRF认证,但是可以让上传的图片函数跳过csrf检查:在主路由中导入:

from django.views.decorators.csrf import csrf_exempt

路由修改为:

url(r'^uploadImg',csrf_exempt(uploadImg)), ④、图片显示:

以上操作只能在富文本框中显示一个图片图标,并不能完整显示出图片内容,如果要完整显示,可以对富文本框进行设置:在settings.py文件的tinymce的默认配置中添加(见3、②):

'relative_urls': False, # 只显示绝对路径链接(关闭相对路径) 'remove_script_host': True, # 图片显示设置

此时在富文本框中添加一张图片:

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器能够正常显示。

Original: https://blog.csdn.net/Nty268/article/details/121990706Author: The_CaibeTitle: Django笔记5–隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

相关阅读 Title: 医疗知识图谱问答系统(python neo4j)

这是中科院软件所刘焕勇老师在github上的一个开源项目

地址:

本项目构建了以疾病为中心的医学知识图谱,实体尺度为44000,实体关系尺度为300000。在此基础上,建立了一个可以回答18种问题的自动答疑系统。

[En]

This project constructs a disease-centered medical knowledge graph, with entity scale of 44000 and entity relationship scale of 300000. Based on this, an automatic question answering system which can answer 18 kinds of questions is set up.

本项目以neo4j作为存储,并基于传统规则的方式完成了知识问答,并最终以cypher查询语句作为问答搜索sql,支持了问答服务。

基于知识图谱的问答框架

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

基于知识图谱的问答系统应用知识

本体构建 RDF 生成 问句解析 SPARQL 查询 答案生成

本项目的问答系统完全基于规则匹配实现,根据问句中的关键词进行匹配,对匹配到的关键词分类问句,然后使用cypher的match去匹配查找neo4j,根据返回数据组装问句回答,最后返回结果。

医药领域知识图谱规模

知识图谱实体类型

实体类型中文含义实体数量举例Check诊断检查项目3,353支气管造影;关节镜检查Department医疗科目54整形美容科;烧伤科Disease疾病8,807血栓闭塞性脉管炎;胸降主动脉动脉瘤Drug药品3,828京万红痔疮膏;布林佐胺滴眼液Food食物4,870番茄冲菜牛肉丸汤;竹笋炖羊肉Producer在售药品17,201通药制药青霉素V钾片;青阳醋酸地塞米松片Symptom疾病症状5,998乳腺组织肥厚;脑实质深部出血Total总计44,111约4.4万实体量级

知识图谱实体关系类型

实体关系类型中文含义关系数量举例belongs_to属于8,844

知识图谱属性类型

属性类型中文含义举例name疾病名称喘息样支气管炎desc疾病简介又称哮喘性支气管炎…cause疾病病因常见的有合胞病毒等…prevent预防措施注意家族与患儿自身过敏史…cure_lasttime治疗周期6-12个月cure_way治疗方式”药物治疗”,”支持性治疗”cured_prob治愈概率95%easy_get疾病易感人群无特定的人群

支持问答的类型

问句类型中文含义问句举例disease_symptom疾病症状乳腺癌的症状有哪些?symptom_disease已知症状找可能疾病最近老流鼻涕怎么办?disease_cause疾病病因为什么有的人会失眠?disease_acompany疾病的并发症失眠有哪些并发症?disease_not_food疾病需要忌口的食物失眠的人不要吃啥?disease_do_food疾病建议吃什么食物耳鸣了吃点啥?food_not_disease什么病最好不要吃某事物哪些人最好不好吃蜂蜜?food_do_disease食物对什么病有好处鹅肉有什么好处?disease_drug啥病要吃啥药肝病要吃啥药?drug_disease药品能治啥病板蓝根颗粒能治啥病?disease_check疾病需要做什么检查脑膜炎怎么才能查出来?check_disease 检查能查什么病全血细胞计数能查出啥来?disease_prevent预防措施怎样才能预防肾虚?disease_lasttime治疗周期感冒要多久才能好?disease_cureway治疗方式高血压要怎么治?disease_cureprob治愈概率白血病能治好吗?disease_easyget疾病易感人群什么人容易得高血压?disease_desc疾病描述糖尿病

问答样例

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器 项目实现

1.项目运行配置要求:要求配置neo4j数据库及相应的python依赖包

根据neo4j 安装时的端口、账户、密码,修改相应文件:answer_search.py 和build_medicalgraph.py 、neo4j

安装neo4j(neo4j 依赖java jdk 1.8版本以上),见文章:http://t.csdn.cn/UAu3Q

安装好neo4j后,登录网站http://localhost:7474/browser/

查看端口号和用户名

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

并修改相应python文件

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

2.知识图谱数据导入:python build_medicalgraph.py,导入的数据较多,需要几个小时。

这一步的数据导入会出现一些问题,需要注意编码格式、包的正确安装等。

[En]

There will be some problems in this step of data import, we should pay attention to the coding format, the correct installation of the package, etc.

安装 py2neo

直接使用pip install py2neo命令会默认安装最新版,可能使用会出现问题

推荐安装4.3.0版本:pip install py2neo==4.3.0 -i https://pypi.douban.com/simple

导入成功后即可查看

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

3、启动问答:python chat_graph.py

安装 pyahocorasick

pip3 install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/

Django笔记5--隐藏真实的静态文件路径&后台上传图片到服务器&富文本编辑器

Original: https://blog.csdn.net/Minor0218/article/details/126431184Author: Minor0218Title: 医疗知识图谱问答系统(python neo4j)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/289957/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3