s10_part3_django_basic
django安装
mkdir -p ~/PycharmProjects/project/Django2.0cd ~/PycharmProjects/project/Django2.0virtualenv mysite-envsource mysite-env/bin/activatepip install django==1.11.11pip listdeactivate #退出虚拟环境
startproject
django-admin startproject mysitetree mysitemysite/├── manage.py└── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
cat
from django.conf.urls import urlfrom django.contrib import admin#为了避免自己写http协议的socket,这里直接引用 django的HttpResponsefrom django.shortcuts import HttpResponsedef test_url(request): #自定义一个函数,request代表所有的http请求,可以是任务字符,通常习惯上使用request return HttpResponse("hello world!") #返回一串字符urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^test_url/', test_url),]
启动django服务器
命令行中输入python runserver //启动服务器
再浏览器中输入: 即可到返回的字符串:hello world!配置
settings.py中默认存在:BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))所有的html相关文件的设置都在这里注意:填写DIRS采用这种内置函数的方式 'DIRS': [os.path.join(BASE_DIR,'templates')],不要使用字符串拼接,因为不确定运行的操作系统的路径分隔符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', ], }, },]
所以在BASEDIR(即这里的mysite)下新建一个文件夹templates,然后将html文件放置于这个文件夹中即可
使用render返回网页
cat
from django.conf.urls import urlfrom django.contrib import admin#为了避免自己写http协议的socket,这里直接引用 django的HttpResponsefrom django.shortcuts import HttpResponse, renderdef test_url(request): #自定义一个函数,request代表所有的http请求,可以是任务字符,通常习惯上使用request return HttpResponse("hello world!") #返回一串字符def test_url2(request): return render(request,"url2.html") #返回html文件 #如果url2.html的位置是在templates下的某一个文件夹XX #那么改为:return render(request,"xx/url2.html") 即可# 返回渲染的html与以下读取文件,返回字符串的效果相同def test_url3(request): # with open("xx/url2.html",'rb') as f: #等价于下一写法 with open("xx/url2.html",'r',encoding='utf-8') as f: data = f.read() return HttpResponse(data)urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^test_url/', test_url), #前面部分为访问的url,后面为调用的函数名 url(r'^test_url2/', test_url2), url(r'^test_url3/', test_url3),]
startapp
为了代码的模块化,功能化,维护更便捷,因此采用django app的方式构建整个项目
在开启一个项目后后根据功能模块创建django APP,这里创建一个名为library的appcd mysitepython manage.py startapp librarytree ../mysitemysite/├── library│ ├── admin.py│ ├── apps.py│ ├── __init__.py│ ├── migrations│ │ └── __init__.py│ ├── models.py│ ├── tests.py│ └── views.py├── manage.py└── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
注册已创建的django APP
vim
# Application definitionINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 'library', 此种写法与下面效果一样,二选其一,但推荐下面一种写法 'library.apps.LibraryConfig' #推荐的写法]
配置连接MySQL数据库
django不能自动创建数据库,因此需要手动创建数据库
mysql -u root -p -H $host -P $portcreate database mysite default charset utf8;show databases;
配置连接MySQL数据库
vimDATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'Pw123456', 'NAME': 'mysite', }}
使用pymysql连接数据库
这里设置django中使用pymysql代替默认使用的MySQLdb连接数据库
修改mysite.mysite.init.pyimport pymysqlpymysql.install_as_MySQLdb()
在开发环境中安装pymysql:
pip3 install pymysql
在django app下的models.py中定义类
这个类必须继承models.Model
from django.db import models#每个类分别对应数据库中的表,每个属性对应为表中字段,数据表中的第条记录对应为类的一个实例化对象# Create your models here.class UserInfo(models.Model): id = models.AutoField(primary_key=True) #创建一个自增的字段,并设置为主键 name = models.CharField(null=False,max_length=20) #创建一个varchar类型的字段,不能为空,最多20个字符串
使用ORM执行SQL命令
在项目根目录下执行
python3 manage.py makemigrationspython3 manage.py migrate
展示用户列表
在mysite.mysite.urls.py中增加以下内容
from library import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^user_list/', views.user_list),]
在mysite.library.views.py中增加以下内容
from django.shortcuts import renderfrom library import models# Create your views here.# 展示所有用户的的函数def user_list(request): # 取出所有数据,实列化为每个相应的对象,放入一个列表中 # order_by("id")可以使查询的数据以ID从小到大排序 ret = models.UserInfo.objects.all().order_by("id") # print(ret) # print(ret[0].id, ret[0].name) #提取每个对应的属性值打印到控制台 # 传一个字典给网页模板,模板渲染后展示给用户 return render(request, "user_list.html", {"user_list": ret})
在mysite.templates目录下,创建user_list.html
user list
序号 | id值 | 姓名 |
---|---|---|
{ { forloop.counter }} | { { user.id }} | { {user.name}} |
添加用户
在mysite.mysite.urls.py中的urlpatterns里增加以下内容
url(r'^add_user/', views.add_user),
在mysite.library.views.py中增加以下内容
from django.shortcuts import render, HttpResponse,redirect# 添加用户的函数def add_user(request): if request.method == 'POST': # 用户填写了新的用户名,并发送了POST请求过来 new_name = request.POST.get("username", None) # 用数据库中创建一条用户记录 models.UserInfo.objects.create(name=new_name) # 返回添加成功 # return HttpResponse("添加成功") # 或者返回用户展示页面 return redirect("/user_list/") # 第一个请求页面时,返回一个页面,页面上有个框让用户填写需要新建的用户名 return render(request, "add_user.html")
在mysite.templates目录下,创建add_user.html
添加用户
修改mysite.templates.user_list.html,增加添加用户的超链接入口
添加用户
删除用户
在mysite.mysite.urls.py中的urlpatterns里增加以下内容
url(r'^delete_user/', views.delete_user),
在mysite.library.views.py中增加以下内容
# 删除用户的函数def delete_user(request): # 删除指定数据 # 从GET请求参数里面拿到将要删除的数据的ID值 del_id = request.GET.get("id", None) # 如果取到了ID值 if del_id: # 根据这个ID值去数据库找到数据对象 del_obj = models.UserInfo.objects.get(id=del_id) # 调用该对象的delete方法删除数据对象 del_obj.delete() # 返回删除后的用户展示页面 return redirect("/user_list/") else: return HttpResponse("要删除的数据不存在!")
修改mysite.templates.user_list.html,增加删除用户的超链接入口
添加用户
序号 | id值 | 姓名 | 操作 |
---|---|---|---|
{ { forloop.counter }} | { { user.id }} | { {user.name}} | 删除 |
编辑用户
在mysite.mysite.urls.py中的urlpatterns里增加以下内容
url(r'^edit_user/', views.edit_user),
在mysite.library.views.py中增加以下内容
# 编辑用户的函数def edit_user(request): error_msg = "" # 用户修改完用户名,点击提交按钮,发送给服务器新的用户名 if request.method == "POST": # print(request.POST) #打印POST的数据到控制台 # 取出用户的ID,新的用户名 edit_id = request.POST.get("id", None) new_name = request.POST.get("username", None) # 根据ID取到要编辑的用户对象 edit_obj = models.UserInfo.objects.get(id=edit_id) edit_obj.name = new_name edit_obj.save() # 将修改提交到数据数据库保存 # 跳转到用户展示页面,查看是否修改成功 return redirect("/user_list/") edit_id = request.GET.get("id", None) if edit_id: # 获取当前编辑的用户对象 edit_obj = models.UserInfo.objects.get(id=edit_id) return render(request, "edit_user.html", {"user": edit_obj}) else: error_msg="编辑的用户不存在!" return render(request,"edit_user.html", {"err_msg":error_msg})
在mysite.templates目录下,创建edit_user.html
编辑用户 编辑姓名
附:
## 静态文件配置项STATICFILES_DIRS
默认此项配置位于settings.py的最后
#此项是静态文件保存目录的别名,这个static就代表了下面STATICFILES_DIRS列表中的所有路径#因此在html中引用static下的CSS文件时,只需要写static/path/to/css/file即可STATIC_URL = '/static/'#添加如下静态文件项,将所有的静态文件(js,css,images)都放在下面配置的路径中STATICFILES_DIRS = [os.path.join(BASE_DIR,"static_library")os.path.join(BASE_DIR,"static_test")]
例如:
pycharm连接MySQL工具的使用
1.在pycharm菜单栏上点[Views],然后勾选[Tool Button]
2.在窗口最右边出现ToolButtion的工具栏,选Database栏 3.依次点[+]->[Data Source] 4.在弹出窗口中填写相应的MySQL数据库的信息 5.初次使用时,需要下载驱动,即:点击下方的[Download missing driver files] 6.点[OK]后,即可可视化操作MySQL的数据库帮助命令
python manage.py help //查看帮助命令python manage.py migrate //初始化默认数据库python manage.py createsuperuser //创建超级管理员