在前面两篇文章环境配置完成的基础上完成以下入门功能的实现。
新建一个项目,向数据库中写入内容并将数据库表内容显示在页面上。
主要参考资料:https://blog.csdn.net/lxfHaHaHa/article/details/76565756
参考教程中的代码及配置是Django1.x下的规则,将相关内容改成了符合Django2.0的形式。
1.新建一个项目Biomass
django是Python的一个开源web框架,在pycharm开发环境中,pycharm专业版在新建一个项目的时候有django选项,帮助创建一个django框架的项目。pycharm社区版需要自己创建。
执行命令:django-admin startproject biomass
然后在Pycharm中Open file打开即可。
参考教程:https://www.cnblogs.com/fanyuchen/p/6918735.html
2.新建工程app1
进入项目的文件目录,执行命令python manage.py startapp app1
3.修改settings.py
(1)在INSTALLED_APPS添加自己的工程名称。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'*****'
]
(2)修改DATABASES项中配置的内容。
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER':'*****',
'PASSWORD':'******',
'HOST':'*******',
'PORT':'****',
}
}
4.修改站点的__init__.py文件
添加如下代码
import pymysql
pymysql.install_as_MySQLdb()
5.在django中建立表格,同步到mysql中
(1)修改models.py文件
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
birthday=models.DateField()
(2)同步:
python manage.py makemigrations --empty app名称
python manage.py makemigrations
python manage.py migrate
(3)这个时候navicat视图中显示出了person表结构
可以通过命令行的形式实现数据的增删改查,详细教程参考:
https://blog.csdn.net/lxfHaHaHa/article/details/76565756
6.写一个网页将数据库表person表的内容显示出来
(1)在app1目录下新建templates文件夹,在其下面新建index.html文件。
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<form action="/mytest/" method="post" enctype="multipart/form-data">
{% csrf_token %}
name: <input type="text" name="name"><br>
age: <input type="text" name="age"><br>
birthday: <input type="date" name="birthday"><br>
<input type="submit" value="提交">
</form>
<br>
列表:
<table>
<tr><td>id</td><td>name</td><td>age</td><td>birthday</td></tr>
{% for a in list %}
<tr>
<td>{{a.id|safe}}</td><td>{{a.name|safe}}</td><td>{{a.age|safe}}</td><td>{{a.birthday}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
修改settings.py中的TEMPLATE路径:'DIRS': ['./templates'],
(2)修改项目的urls.py文件
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('app1/', include('app1.urls')),
path('admin/', admin.site.urls),
]
(3)修改工程app1的url.py文件
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
(4)工程app1下的views.py文件
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .models import *
from django.views.decorators.csrf import csrf_protect
from django.template import loader
@csrf_protect
def index(request):
if request.POST:
p=Person(name=request.POST['name'],age=request.POST['age'],birthday=request.POST['birthday'])
p.save()
return getdata(request)
def getdata(request):
list=Person.objects.all()
print(list)
return render(request, 'index.html',{'list':list})
(5)工程app1下的models.py文件
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
birthday=models.DateField()
def __unicode__(self):
# 在Python3中使用 def __str__(self):
# 用来输出
return 'name:'+self.name+';age:'+str(self.age)+';birthday:'+str(self.birthday)
数据库中原始情况下有四条记录,在页面上提交一条新记录:
在navicat中刷新表内容
如果在数据库中增添记录,刷新网页,同样可以看到在后台新增的数据。