PyCharm 开发Django ,错误汇总

简介: 近期略微接触了一下Django。在学习的过程中可谓是坎坎坷坷,遇到了很多的问题。 下面就来谈一谈我对Django的一点点的见解。Django项目的创建使用PyCharm来开发Django项目是非常的简单的。

近期略微接触了一下Django。在学习的过程中可谓是坎坎坷坷,遇到了很多的问题。
下面就来谈一谈我对Django的一点点的见解。


Django项目的创建

使用PyCharm来开发Django项目是非常的简单的。创建项目的时候选中Django项目,然后在more settings中写上应用的名称。这样就算是创建好了一个全新的项目。
如下图:
这里写图片描述

这里写图片描述 虽然这里面有一个MyDjango的子文件夹,但是这个文件夹的存在是MyDjango项目的支持文件。我们最好是在应用文件夹MyBlog下完成我们的业务。这样更容易进行管理。



在这个过程中,我就遇到了让我很是难忘的问题。

问题一:
没有MyBlog文件夹.
这个问题的出现是因为你没有分清楚项目和应用之间的区别。我刚开始的时候,就犯了这个错误。

应用是存在于项目内部的实现了一系列功能的模块。是做为子集而存在的。

django-admin startproject projectname//创建一个Django项目
django-admin startapp appname// 创建一个django的应用

这样就好了。当然这一个步骤使用PyCharm更加的简单。在这里就不过多叙述了。

问题二:
初始访问就失败了.
这一点,我们可以这么来想,访问一个服务器上面的一个路径,首先这台服务器上必须要有这个应用程序吧。所以我们需要将这个应用部署到服务器上。
在这里开发服务器上同样也要被部署上相关的应用,而这个应用就是我们刚才创建的那个应用MyBlog.所以要在settings.py中对INSTALLED_APP进行应用名称的添加。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MyBlog',
]

下面我在提供一个多图的PyCharm开发Django项目的链接,总结的很详细。
图解 PyCharm+Django

Django 常用的命令

这里简单的介绍几个常用的命令。

django-admin startproject projectname //创建一个django项目

django-admin startapp appname // 创建一个django项目的应用

python manage.py runserver //运行项目,并将项目部署到开发服务器上面

python manage.py syncdb // 这一个过时了,待会说

python manage.py makemigrations
python manage.py migrate这两个需要配合使用,目的是对数据库中相关表结构的创建以及同步操作

python manage.py createsuperuser // 创建一个超级管理员,用于后台的管理任务

urls.py的配置

这个文件就是一个映射文件,用于将我们在浏览器中输入的url映射到相关的视图展示函数上。有静态映射和动态映射之区分。
静态映射的方式:
这里主要是静态的url的映射的处理。共有如下几种方式:

#    1:使用模块的方式引入
from MyBlog.views import *
        url(r'^showStudents/$',showStudents),
        url(r'^PurpleRing1/$',purpleRing1),
        url(r'^PurpleRing2/$',purpleRing2),
#  2:使用字符串的方式连接
 urlpatterns = ['MyBlog.views',
            url(r'^admin/', admin.site.urls),
            url(r'^MyBlog/$','sayHello'),
            url(r'^showStudents/$','showStudents'),
            url(r'^PurpleRing1/$','purpleRing1'),
            url(r'^PurpleRing2/$','purpleRing2'),
        ]
#    3:方式2的变种
 urlpatterns = [
            url(r'^admin/', admin.site.urls),
                            url(r'^MyBlog/$','MyBlog.views.sayHello'),
            url(r'^showStudents/$','MyBlog.views.showStudents'),
            url(r'^PurpleRing1/$','MyBlog.views.purpleRing1'),
            url(r'^PurpleRing2/$','MyBlog.views.purpleRing2'),
        ]

动态url的匹配:
这里主要是利用正则表达式的方式来实现的,如下面的几个小例子。

# 1:简单形式
url(r'^MyBlog/index/\d{2}/$','MyBlog.views.index')
        就把url形式为MyBlog/index/数字长度为两个  类型的映射到了MyBlog.views.index 函数上了
 2:复杂点的
  url(r'^MyBlog/index/(?P<id>\d{2})/$)','MyBlog.views.index')
        就是url链接为MyBlog/index/数字  类型的网址才会被映射到index对应的方法上去。并展现出对应的视图
        对应的index方法声明:def index(request,id):# 也就是说url中的那个分组中的参数要在这里保持一致

模板渲染相关

我们的项目中需要有一个名称固定为templates 的文件夹,用于存放我们的页面视图的模板文件。当有用户请求时,底层就会通过MVC模式将模板文件渲染并展示给用户相关的页面。

渲染的方法有静态渲染,也有动态渲染(其实也不算是动态渲染了,只是加进了模板变量和模板标签等而已)。

先来看一个简单的渲染方法

哦,对了。忘了说了。渲染的代码逻辑都是应该在views.py中进行实现的。

from django.http import HttpResponse
from django.template import loader,Context

# 方式一(有冗余操作):
def purpleRing(request):
    # 加载一个templates文件夹下的模板文件,这里的templates文件夹名称固定
    t = loader.get_template('PurpleRing.html')
    C = Context({})
    return HttpResponse(t.render(C))

这种方式略显繁琐,所以引入下面的较为简单的方式。

# 方式二
from django.shortcuts import render_to_response

def purpleRing(request):
    return render_to_response('PurpleRing.html','{}')

第二个参数是一个字典类型的数据,如果模板中没有使用到模板变量,或者模板标签。就让它为空即可。

下面来看一看使用模板变量以及模板标签的渲染吧。

  • 模板变量{{模板变量名}}
    在模板文件中在用得到变量的地方使用模板变量的方式进行添加。
    然后在render_to_response的第二个参数(一个字典)中,我们就可以使用这个模板变量的key为其指定value的值。

    注意:
    模板变量可以使用额=的数据类型可以是字典,列表,甚至是一个类,并且使用类的时候
    我们应该可以直接使用其成员变量,这很容易理解了。还可以直接按照调用类的成员变量的
    形式调用其内部的方法,但是注意这时使用到的方法不能带参数,而且需要并且一定要有一个返回值

  • 模板标签{% 标签内容%}

仍旧是看几个小例子吧。

1:{% if statement%} # if 后面不能加括号
        <li>XX:{{标签变量}}</li>
        {% else %}
        <li>XX:{{标签变量}}</li>
        {% endif %}

    2:{% for XX in XXS %}
        <li>XX:{{标签变量}}</li>
        {% endfor %}

下面来看一个较为复杂的也较为全面的渲染文件的写法。

urls.py中的映射:

 url(r'^showStudents/$',showStudents),

views.py中:

from django.shortcuts import *

from django.http import HttpResponse
from django.template import loader,Context

def showStudents(request):
    list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
    return render_to_response('template_student.html',{'students': list})

template_student.html:

 <!DOCTYPE html>
 <html>
 <head>
     <title></title>
 </head>
 <body>
     <ul>
         {% for student in students %}
         <li>
            id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}
        </li>
        {% endfor %}
    </ul>
</body>
</html>

Django中关于数据库的使用

django是一个优秀的web框架,所以它必然支持很多类型的数据库。下面我们以sqlite3为例,看一下其书写:

# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'MyBlog.db',
        'USER':'',
        'PASSWORD':'',
        'HOST':'',
        'PORT':'',
    }
}

我们需要知道的是engine代表数据库类型就行。至于NAME就是我们在数据库中的对应的数据库名称。

也许,你会想使用MySQL数据库,当然,这也是没问题的,我们需要更改的也就对应着engine,name,user,password,port 等等的设置,接触过web开发的都很清楚了。就不多说了。

下面谈点实际的,那就是遇到了数据库相关的错误了。怎么办?

错误一:
django.db.utils.OperationalError: unable to open database file

这个问题的出现有两种情况:
一:
         没有安装连接从数据库的驱动文件,解决方法。安装一下相关的connection 文件,比如jar什么的都行,在PyCharm下很方便。
二:
        这是文件权限被禁止而引起的。
        在Linux下,修改一下权限即可。即chmod + 775 + 数据库文件名称。

        但是今天我们要说的是怎么在Windows下怎么做。

# django < 1.7 时:
    python manage.py syncdb

# django > 1.7 时:
    python manage.py makemigrations
    python manage.py migrate

错误二:
django.db.utils.OperationalError: no table named XXX.这是因为我们虽然在models.py中创建了相关的对象,但是数据库中还没有得到同步,所以访问一个不存在的东西,肯定是会报错的。所以要对数据库完成一次同步操作。

# django < 1.7 时:
    python manage.py syncdb

# django > 1.7 时:
    python manage.py makemigrations
    python manage.py migrate

总结

上面的都是我在学习的过程中亲身遇到的一些问题,貌似能遇到这么多问题,也是一种幸运。这样才让我获得了更多的经验嘛。
真好!

目录
相关文章
|
27天前
|
存储 前端开发 关系型数据库
108-Django开发在线书店
该项目是一个使用Python Django框架开发的在线书店系统,提供用户管理(包括普通用户、管理员和匿名用户)、权限管理、书籍管理、订单管理和额外功能(搜索、购物车、支付和评论)。系统支持安全的HTTPS传输和加密密码存储,保证用户数据安全。通过Django实现了用户购书、管理员后台管理的全面功能,兼顾易用性和可维护性。
31 0
|
29天前
|
缓存 数据挖掘 数据库
104-Django开发在线美食购物网站
美味小厨在线购物网站是基于Python和Django构建的电商平台,提供商品展示、搜索过滤、问题反馈、购物功能、商品详情查看、产品编辑添加、多用户及站点管理、订单管理等服务。采用Django框架实现高效、稳定且可扩展的系统,前后端分离以提升性能,支持数据库优化和缓存技术,注重用户数据安全。未来计划优化用户体验,拓展更多功能,并加强数据分析。
17 1
|
20天前
|
前端开发 搜索推荐 数据挖掘
112-Django开发快捷电子商城
这是一个电商平台的技术栈和功能亮点介绍。平台基于Python Django框架构建,采用Sqlite数据库,保证稳定性和可扩展性。前端利用Bootstrap和jQuery提供响应式设计。管理后台具有灵活权限管理、直观界面和数据分析功能。购物车支持智能推荐、多平台同步和快速结算。订单管理具备实时追踪、智能提醒和数据分析。优惠券系统涵盖多种类型,实现精准发放和效果分析。商城管理注重商品信息丰富、智能搜索和多渠道营销。响应式布局确保全平台适配,优化加载速度并支持个性化主题。文中还附有多张示意图展示相关功能。
21 0
|
20天前
|
前端开发 JavaScript UED
111-Django开发酒店管理系统
这个内容描述了一个基于Python Django框架的酒店管理系统,采用SimpleUI、Bootstrap和jQuery来设计界面和实现响应式布局及动态交互。系统有多个用户角色,包括管理员、店长、经理、接待客服和员工,每个角色有不同的权限,例如管理员可以管理所有模块,店长和经理则限于特定店铺或部门,而接待客服主要负责客人入住和预订管理。此外,系统还包含了房间管理、活动管理、预订管理、客房服务、注意事项和退款管理等多个功能模块。系统界面设计简洁直观,支持多设备适应。
49 0
|
26天前
|
前端开发 JavaScript 数据库
110-Django开发社交聊天网站
该内容描述了一个聊天网站的功能模块和技术实现要点,主要包括: 1. 用户管理:用户注册、登录/登出、信息编辑和密码管理。 2. 权限管理:角色定义、权限分配和访问控制。 3. 好友管理:添加、查看、删除好友及处理好友请求。 4. 通讯管理:创建聊天室、在线聊天、消息发送/接收、历史记录和实时通知。 5. 技术实现:使用Django认证系统、channels库支持WebSocket、MySQL数据库、前端技术(如HTML/CSS/JavaScript)以及性能优化。 请注意,由于字符限制,部分图片无法在摘要中展示。
32 6
|
26天前
|
前端开发 关系型数据库 MySQL
109-Django开发考试与问卷系统
该项目描述了用户、测试和权限三个核心模块的详细需求。用户模块包括注册(需验证信息并唯一性检查,密码安全存储,确认邮件)和登录(凭据验证,可选的“记住我”功能,防止暴力破解)。测试模块涉及题目、选项和分数设置,支持创建、编辑及自动评分。权限模块关注用户角色和权限管理,实现访问控制。其他考虑因素涵盖用户界面、数据库选择(如SQLite3和MySQL)、安全性最佳实践以及系统的可维护性和可扩展性。
17 3
|
28天前
|
前端开发 JavaScript 测试技术
107-Django开发医院管理系统(医生-患者-医院管理员)
该内容描述了一个基于Python和Django的医疗管理系统的开发步骤。主要涵盖以下关键点: 1. 环境搭建:安装Python和Django,创建项目和应用。 2. 数据库模型:设计用户、医生、患者、发票和预约等模型。 3. 用户认证和权限:使用Django内置系统,创建自定义角色和权限。 4. 视图和模板:处理用户请求,渲染HTML页面,包括医生列表、患者注册、管理界面等。 5. 表单处理:创建表单处理用户输入,验证数据并保存到数据库。 6. PDF生成:利用xhtml2pdf库生成治疗发票的PDF。 7. 路由配置:设置URL路由以连接视图。
54 7
107-Django开发医院管理系统(医生-患者-医院管理员)
|
29天前
|
数据库 数据安全/隐私保护 开发者
106-Django开发在线交易网站
该内容是关于使用Django框架开发电子商务网站的步骤摘要:
25 2
|
29天前
|
存储 前端开发 关系型数据库
105-Django开发多商户询盘上级网站-在线聊天交流通讯
该项目旨在构建一个在线询盘交易系统,采用Python的Django框架,支持SQLite3(开发)或MySQL/PostgreSQL(生产)数据库。功能包括用户注册登录、产品上传(带审核)、搜索过滤、即时通讯、超级用户管理端、数据分析和响应式界面。还将考虑使用WebSocket、Redis缓存、Docker部署和推荐算法。数据库设计涉及用户、产品、订单和聊天记录表。开发流程涵盖需求分析、技术选型、数据库设计、编码、测试和部署,同时关注安全性、性能、可维护性和兼容性。
22 2
|
29天前
|
BI Python
103-Django开发投票选举系统
这是一个基于 Python 3.11 和 Django 的全功能投票选举系统,提供用户认证、首页展示、投票功能、投票内容管理、数据统计与展示、用户管理和权限分配。系统支持第三方登录、搜索过滤、投票详情查看、选项选择及统计,并具有良好的扩展性和第三方系统集成能力。适用于各种选举场景,如学校选举、公司投票或在线调查。
23 0