urls.py
网址入口,关联到对应的views.py文件的一个函数,访问网址对应一个函数。
views.py
处理用户发出的请求,从urls.py中对应过来,通过templates中的网页可以将显示内容(比如登陆的用户名,用户请求数据,输出)到网页。
models.py
与数据库操作相关,存入或者读取数据时会用。
forms.py
表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框生成等工作。
templates文件夹
views.py中的函数渲染templates中的html模板,得到动态内容的网页,也可以使用缓存来提高速度。
admin.py
后台,可以用很少量的代码就拥有一个强大的后台。
settings.py
Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。
虚拟环境(venv)是pythin多版本管理,可以使得每个项目环境与其他项目独立起来,保持环境干净,解决报之间的冲突。
新建我们我们项目的文件夹,进入文件夹,开始配置venv的命令,其中env为虚拟环境的放置目录;
创建完成之后,输入env\Scripts\activate.bat进入虚拟环境:
表示已经成功进入虚拟环境
安装django 2.1版本
表示安装成功,安装完成开始创建工程项目
django-admin startproject project
在django中一个app代表一个功能模块。将不通的功能放在不通的模块中,方便代码的复用以及管理。进入创建的project的目录下
python manage.py startapp myapp
在project工程下的settings.py文件修改如下:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
django连接mysql数据库
每一个模型都映射一个数据库表,包含存储的数据的重要字段和行为
每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
模型相当于数据库中数据表
对象相当于数据表中的行
属性相当于数据表的字段
django默认使用sqlite为数据库,我们使用mysql作为数据库,前提需要安装pymysql(python3支持)
django不能创建数据库,需要自己手动去创建数据库。如果确定使用该模型(数据库),需要在工程项目下的settings.py文件修改如下:用于连接数据库
DATABASES = {
'default': {
#将sqlite数据库改成mysql数据库
'ENGINE': 'django.db.backends.mysql',
#需要操作的数据库名(提前创建好的)
'NAME': 'databasename',
#用于连接数据库的用户
'USER': 'username',
#连接数据库用户的密码
'PASSWORD': 'password',
#连接数据库的主机ip
'HOST': '主机ip',
#数据库的端口号
'PORT': '3306',
}
}
然后在工程下__init__.py文件添加:
import pymysql
#主要作用告诉django使用pymysql代替mysqldb
pymysql.install_as_MySQLdb()
在应用下创建模型
在myapp项目的modles.py文件添加内容
定义students的数据表,字段Name,sex,age,contend
class Students(models.Model):
name = models.CharField(max_length=20)
sex = models.BooleanField(default=True)
age = models.IntegerField()
contend = models.CharField(max_length=30)
模型的字段
模型中每一个字段都应该是相应类的实例, Django 利用这些字段类来实现下面这些功能:
字段类型用以指定数据库数据类型
默认的HTML表单输入框
用于Django admin和自动生成表单的基本验证
默认情况下, Django 会给每一个模型添加下面的字段:一个自增的主键,每个模型都需要拥有一个设置了 primary_key=True 的字段。
id = models.AutoField(primary_key=True)
在project的工程目录下
E:\PycharmProjects\myword>python manage.py makemigrations
Migrations for 'myapp':
myapp\migrations\0001_initial.py
- Create model Students
E:\PycharmProjects\myword>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, myapp, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying myapp.0001_initial... OK
Applying sessions.0001_initial... OK
数据库查看是否生成student的表
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| dedecmsv |
| django |
| information_schema |
| jeecg |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
mysql> use django;
mysql> show tables;
+----------------------------+
| Tables_in_django |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| myapp_students |
+----------------------------+
mysql> desc myapp_students;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | tinyint(1) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| contend | varchar(30) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
删除数据表
将应用下的modles.py文件的函数注释,再次执行迁移文件并且执行迁移文件,查看数据库的表已经删除
修改数据表
将应用下的modles.py文件的类的属性修改,再次执行迁移文件并且执行迁移文件,查看数据库的表已经删除
pycharm连接数据库
自动下载安装驱动:
安装完成填写上面数据库连接的主机,用户密码等等;完成后点击test连接,出现成功表示测试成功;
表示连接成功;
E:\PycharmProjects\myword>python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
April 16, 2019 - 21:48:21
Django version 1.11.11, using settings 'myword.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
在myapp项目的views.py文件修改
from django.http import HttpResponse
def index(request):
return HttpResponse('hello world!')
在project项目的urls.py文件修改
from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^',include('myapp/urls'))
]
在myapp项目创建urls.py文件,并且修改
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.index),
]
在project工程的settings.py文件配置模板目录
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')] #配置路径
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
在project的工程下创建templates的模板目录,可以在模板目录下为每个项目创建项目模板目录,为myapp项目模板创建index模板,修改如下:
主页
hello world!
在对myapp项目的views.py文件修改
def index(request):
#return HttpResponse('hello world!')
return render(request,'myapp/index.html')
最近看python编程从入门到实践,对于django后面的简单教程,下来自己实际动手操作一遍,加深对于django的模式理解。下面是在操作过程中遇见的问题:
第一个报错
TypeError: 'set' object is not reversible
网上基本就是在urls.py文件中urlpatters是[]列表格式被自己写成{}字典格式,将字典修改为列表即可
第二个报错
第二个错误是在视图中已经从数据库得到自己想要的数据,然而在第二步将数据填充到字典时,因为自己将字典的key值搞错了,导致后期再模板中显示不到数据。
浏览器显示:
找到原因后将字典的topic修改成topics然后就可以正常显示
第三个错误
NoReverseMatch at /new_entry/1/
Reverse for 'topic' with arguments '('',)' not found. 1 pattern(s) tried: ['topics/(?P\\d+)/$']
模板的代码如下:
{% block content %}
添加新的条目:
{% endblock content %}
提示反响解析错误,报错时很懵不知道自己错在什么地方,网上查询了很多资料,出错原因有很多种,
问题可能在topic_id没有取到值,(在实际中也将topic_id修改为数字,然后可以访问了,但是添加的条目都是在定义好的的id值中)但是从下面可以已经取到正确值
但是在前端页面展示出现问题,后面可能问题出在{% url ‘learning:topic’ topic_id %}中 topic_id展示前端页面。(索性将url全部删除竟然可以正常访问,而且条目可以正常添加),这种方法不知道存不存在问题,后面做完整个教程在看看
{% block content %}
添加新的条目:
{% endblock content %}