第一次使用django开发网页遇到的问题
来源:互联网 发布:开淘宝店怎么刷销量 编辑:程序博客网 时间:2024/05/21 10:06
撰写时间:2017.6.15晚
—今天太晚了,只是整理了材料,明天再统一整理一下—-
系统环境:ubuntu14.04,django1.11,python2.7
首先安利一波django,确实是很好用的套件,其中关于数据库的操作让我有点佩服,基本我想要的他都能找到API,给人一种恰到好处的感觉!但是寻找API的过程是比较痛苦的,还有就是作为新手,对django不熟,是很痛苦的经历.而且在学习django的过程中一定要知其然,而且知其所以然,才能熟练使用他,而我只是课程作业用一次,我以后应该用的比较少.遇到的问题记录一下,权当笔记.
版本 django1.11,不同版本就不要看了!
下面的博客内容有很多主观臆测的东西…因为我压根就没有仔细读他的文档…
还有这篇文档不是交你怎么做django的,只是我遇到的问题的集合,如果你恰好和我版本一样,而且也遇到了这个问题,就可以参看一下!
项目讲解
首先描述我的项目,不然下面的问题也无从讲解
本项目是一个django实现的论文数据库管理系统,论文数据来自与dblp,从中拆剪了60M的文件,总计数据有13w条数据,然后通过漫长的数据分析.生成了四个表:article,author,journal,article_author,
数据库概念模型
代码实现
# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import modelsfrom django.db import connection,transactionclass articleManager(models.Manager): #select # def select_by_article_title(self,articleTitle): # return super(articleManager, self).get_queryset() def select_by_journal_id(self,journalID): #return super(articleManager, self).get_queryset().filter(journal_id__in = journalID) return super(articleManager, self).get_queryset().filter( journal_id__in = journalID).select_related('journal').prefetch_related('author_set') #sql = """select * from papermodel_article where article_id=1""" #return super(articleManager, self).raw(sql); #create tables.class article(models.Model): article_id = models.AutoField(primary_key=True,auto_created=True) article_title = models.CharField(max_length = 1024); article_year = models.IntegerField(); article_volume = models.IntegerField(); journal = models.ForeignKey('journal') url = models.CharField(max_length=81,null=True) object = articleManager() def __unicode__(self): return u'{} {}'.format(self.article_title,self.article_year)class authorManager(models.Manager): #select def select_by_author_name(self,authorName): return super(authorManager,self).get_queryset().filter(author_name__contains='Juha')class author(models.Model): author_id = models.AutoField(primary_key=True,auto_created=True) author_name = models.CharField(max_length = 81); article = models.ManyToManyField(article,through='article_author',through_fields=( 'author','article')); object = authorManager() #display def __unicode__(self): return u'{} {}'.format(self.author_id,self.author_name) class Meta: ordering = ['author_id']class journalManager(models.Manager): #select def select_by_journal_name(self,journalName): return super(journalManager,self).get_queryset().filter(journal_name__contains='ab')class journal(models.Model): journal_id = models.AutoField(primary_key=True,auto_created=True) journal_name = models.CharField(max_length = 81); object = journalManager() #display def __unicode__(self): return self.journal_name class article_author(models.Model): article_author_id = models.AutoField(primary_key=True,auto_created=True) article = models.ForeignKey(article) author = models.ForeignKey(author) serial_number = models.IntegerField(); #display def __unicode__(self): return u'{} {} {}'.format(self.article_id,self.author_id,self.serial_number)
其中包括外键,以及多对多的关系,在查询的过程中就得花心思!
因为下面要实现的功能,与查询息息相关
功能
恩,就是这个丑东西,主要是锻炼数据库sql查询,所以界面我也是才学啊…
搜索框旁边的all是搜索选项,可以选择按照author,article,year,journal等词条搜索,all就是随意…
不管什么搜索,都要显示下面是三个内容.主要是article内容端要包含journal和author的信息,所以这地方的查询对新手来说比较绕.
下面就是我实际在开发中遇到的问题.
在强调一遍,我用的版本是1.11,版本不一样,肯定api有差别的!!
https://www.douban.com/note/301166150/
https://www.douban.com/group/topic/27653472/
问题1:在django中的html引入外部文件,例如css,js,img等外部文件
问题答案参考网址,django1.11文档static设置
此配置仅适合于调试阶段,也就是使用django的runserver在django内部的服务器中运行,不涉及tomcat等外部服务器
- 确保配置文件中(setting.py)INSTALLED_APPS中包含django.contrib.staticfiles
- 在配置文件中(setting.py)中,添加STATIC_URL = ‘/static/’,其中/表示的就是根目录,如下图所示的我的文件目录表,服务器中是将外层paperManager作为/目录的,所以如果你的static不在图示的位置,只要将这个地址改一下就行了.
- 在html中引入外部文件(编辑器太…说不定是我不会用,看下面附件吧)
- 配置url,
- 在setting.py中添加STATICFILES_DIRS字段
###setting.py# Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/1.11/howto/static-files/STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ]STATIC_URL = '/static/'###html{% load static %}<img src="{% static "picture/logo.png" %}" alt = "logo"/>###urlfrom django.contrib.staticfiles import viewsurlpatterns = [ url(r'^static/(?P<path>.*)',views.serve),]
问题2:django中与数据库相关的model层怎么建?包括onevsmany和manyvsmany
class journal(models.Model): passclass article(models.Model): journal = models.ForeignKey(journal,related_name="article")class author(models.Model): article = models.ManyToManyField(article,through='article_author',through_fields=( 'author','article'),related_name="author");class article_author(models.Model): article_author_id = models.AutoField(primary_key=True,auto_created=True) article = models.ForeignKey(article) author = models.ForeignKey(author) serial_number = models.IntegerField();
四张表,其中最后一张表是中间表,因为有第三个字段,所以就需要重新建一个中间表.在外键和多对多关系的建立中,最好都添加一个related_name字段.比如journal和article之间有一个外键连接.其中外键设置在article类中,如果不设置related_name,那么当journal表需要通过外键反查article表时,命名就为article_set,如果设置了related_name,这里就会覆盖article_set的命名.关于如何通过外键反查,请看下面.
问题3:如果数据库的列发生变化,或者想增加数据库之类的怎么通过django model层实现?
django1.11 直接使用migrate管理工具,先修改django model层对应的字段,然后运行下面命令
python manage.py makemigrationspython manage.py migrate
问题4:如何通过article反查author的信息.
这个问题分成两个小问题
1.如何通过外键查询信息
2.如何通过中间表查询信息
https://stackoverflow.com/questions/12139923/all-the-values-of-the-many-to-many-field-django
https://stackoverflow.com/questions/11073454/django-prefetch-related-with-filter
问题5:如何修改
贴上我的文件目录,mvc架构一目了然,其中static目录是用来存放外部文件的
最后安利一波django自动生成的后台管理系统!!!
因为外键约束在增加article的时候,会弹出增加journal的弹出框,不能再赞!!!
关于这个如何将自己的model导入他自动生成的管理界面.可以参考菜鸟教程
- 第一次使用django开发网页遇到的问题
- 使用django开发遇到问题
- 关于django开发遇到的问题
- 开发django过程中遇到的问题
- 第一次微信端网页开发项目遇到的坑
- 第一次使用spen可能遇到的问题
- 第一次使用Lubuntu遇到的问题
- 第一次使用LoadRunner时遇到的问题
- 最近使用django遇到的两个问题
- 微信网页开发遇到的问题
- 网页开发中遇到的小问题
- Django 开发图书馆系统遇到的问题与解决
- 第一次遇到这样的问题
- 第一次在项目中使用JQuery遇到的一点问题
- 第一次使用vim遇到的问题及常用方法
- Freemarker第一次实际项目使用遇到的一些问题
- 第一次使用Android Studio所遇到的问题
- 第一次使用java连接mongodb遇到的问题
- 纯虚基类与虚函数的使用
- Jackson将json字符串转换成泛型List,Map
- 职业规划之方法论
- 开发人员学Linux(8):CentOS7编译安装Subversion1.9.5及Apache2.4.25并集成
- 编码探讨: 该以什么编码打开"gb2312"文本?
- 第一次使用django开发网页遇到的问题
- html
- 关于ListView中CheckBox选择混乱的问题
- 五、Django项目中包含多个应用时对url的配置
- 2017年第0届之江学院程序设计竞赛决赛 A: qwb与支教(容斥+重坑二分)
- Android蓝牙开发学习(传输数据到蓝牙模块)
- css
- leetcode27. Remove Element
- 六、创建Templates(模板)