8_admin.py操作数据库
编辑admin.py(student/admin.py)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib import admin
from models import *
# Register your models here.
admin.site.register(Student)
创建账户密码(创建超级管理员)
python manage.py createsuperuser
另一种方式: Tools --> run manage.py Task...
createsuperuser
注意:第一次打开一般会提示报错,需要安装连接数据库的模块,按照提示的模块pip安装完,然后重新打开该窗口即可
重启服务器
浏览器访问后台管理页面
http://127.0.0.1:8000/admin/
后台方式操作数据库
修改settings.py文件后台页面显示中文
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
修改为:
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
修改models.py文件后台显示对象属性值
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Student(models.Model):
sname = models.CharField(max_length=20,unique=True)
spwd = models.CharField(max_length=20,unique=True)
def __unicode__(self):
return u'Stu:%s,%s'%(self.sname,self.spwd)
9_案例5_查看所有学生信息
配置URL(student/urls.py)
#coding=utf-8
from django.conf.urls import url
import views
urlpatterns = [
url(r'^$',views.login_view),
url(r'^login/',views.to_login_view),
url(r'^register/',views.register_view),
url(r'^show/',views.show_view),
]
编辑视图函数(student/views.py)
#显示所有学生信息
def show_view(request):
#查询所有学生信息
stus = Stu.objects.all()
return render(request,'show.html',{'stus':stus})
创建模板(templates/show.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" width="500px" cellspacing="0">
<tr>
<th>编号</th>
<th>姓名</th>
<th>密码</th>
</tr>
{% for stu in stus %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ stu.sname }}</td>
<td>{{ stu.spwd }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
10_案例6_登录功能(连接MySQL数据库)
安装MySQL-python==1.2.5库
#方式1:
运行窗口:
pip install wheel
pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl
#方式2:
pycharm/settings/project interpreter中添加库
#方式3:
pip2.7 install MySQL-python==1.2.5 # 可以不指定版本号
修改settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#数据库连接器
'NAME': 'logindemo',#数据库名称
'HOST':'127.0.0.1',#数据库主机地址
'PORT':'3306',#数据库端口
'USER':'root',#数据库用户名
'PASSWORD':'123456'#数据库密码
}
}
配置模型类(student/models.py)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Stu(models.Model):
sname = models.CharField(max_length=20,unique=True)
spwd = models.CharField(max_length=20,unique=True)
def __str__(self):
return u'Stu:%s,%s'%(self.sname,self.spwd)
生成数据库表
#创建当前应用的迁移文件
python manage.py makemigrations student
#生成数据库表
python manage.py migrate
配置URL
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^student/', include('student.urls')),
]
#coding=utf-8
from django.conf.urls import url
import views
urlpatterns = [
url(r'^$',views.login_view),
url(r'^login/',views.to_login_view)
]
配置函数视图
#处理登录功能
def doLogin_view(request):
#接收请求参数
uname = request.POST.get('uname','')
pwd = request.POST.get('pwd','')
#判断是否登录成功
count = Stu.objects.filter(sname=uname,spwd=pwd).count()
if count==1:
return HttpResponse('登录成功!')
else:
return HttpResponse('登录失败!')
11_案例7_影片展示
参考网站:https://www.80s.tw/movie/list/-----p/1
创建模型类(逆向生成)
python manage.py inspectdb>movie/models.py
配置URL
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^movie/', include('movie.urls')),
]
#coding=utf-8
from django.conf.urls import url
import views
urlpatterns=[
url(r'^$',views.index_view),
]
创建视图函数
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
from models import *
import math
def page(num=1,size=20):
num = int(num)
if num < 1:
num = 1
# 计算总页数
total_records = Movie.objects.count()
total_pages = int(math.ceil(total_records * 1.0 / size))
if num > total_pages:
num = total_pages
movies = Movie.objects.all()[((num - 1) * size):(num*size)]
return movies,num
# Create your views here.
def index_view(request):
num = request.GET.get('num',1)
ms,n = page(num)
pre_page = n-1
next_page = n+1
return render(request,'movie.html',{'movies':ms,'pre_page':pre_page,'next_page':next_page})
创建模板
<div id="header" class="clearfix">
<ul class="clearfix">
<li>首页</li>
<li>电影</li>
<li>电视剧</li>
<li>动漫</li>
<li>综艺</li>
<li>音乐</li>
<li>MV</li>
<li>视频</li>
<li>短片</li>
<li>公开课</li>
</ul>
</div>
<div id="content" >
<ul class="clearfix">
{% for movie in movies %}
<li>
<a href="{{ movie.mlink }}"><img src="{{ movie.mimg }}"/></a>
<h1 class="h1">{{ movie.mname }}</h1>
<span class="tip">{{ movie.mdesc }}</span>
</li>
{% endfor %}
</ul>
</div>
<div id="pagebar">
<a href="/movie/?num={{ pre_page }}">上一页</a>
<a href="/movie/?num={{ next_page }}">下一页</a>
</div>
启动服务器
python manage.py runserver 127.0.0.1:8000
浏览器访问
http://127.0.0.1:8000/movie/
12_Django分页
创建视图函数
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def page_view(request):
num = request.GET.get('num',1)
num = int(num)
movies = Movie.objects.all()
paginator = Paginator(movies,20)
try:
t_per_page = paginator.page(num)#获取当前页码的记录
except PageNotAnInteger:#如果用户输入的页码不是整数时,显示第1页的内容
t_per_page = paginator.page(1)
except EmptyPage:#如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
t_per_page = paginator.page(paginator.num_pages)
#每页开始页码
begin = (num-int(math.ceil(10.0/2)))
if begin<1:
begin = 1
# 每页结束页码
end = begin+9
if end >pager.num_pages:
end = pager.num_pages
if end <=10:
begin = 1
else:
begin = end -9
pagelist = range(begin,end+1)
return render(request,'movie2.html',{'paginator':paginator,'t_per_page':t_per_page,'pagelist':pagelist})
配置模板
<div id="header" class="clearfix">
<ul class="clearfix">
<li>首页</li>
<li>电影</li>
<li>电视剧</li>
<li>动漫</li>
<li>综艺</li>
<li>音乐</li>
<li>MV</li>
<li>视频</li>
<li>短片</li>
<li>公开课</li>
</ul>
</div>
<div id="content" >
<ul class="clearfix">
{% for movie in t_per_page %}
<li>
<a href="{{ movie.mlink }}"><img src="{{ movie.mimg }}"/></a>
<h1 class="h1">{{ movie.mname }}</h1>
<span class="tip">{{ movie.mdesc }}</span>
</li>
{% endfor %}
</ul>
</div>
<div id="pagebar">
{% if t_per_page.has_previous %}
<a href="/movie/page/?num={{ t_per_page.previous_page_number }}">上一页</a>
{% endif %}
{% for n in paginator.page_range %}
{% if n <= 10 %}
<a href="/movie/page/?num={{ n }}">{{ n }}</a>
{% endif %}
{% endfor %}
{% if t_per_page.has_next %}
<a href="/movie/page/?num={{ t_per_page.next_page_number }}">下一页</a>
{% endif %}