Day066 Django (二)

mac2025-08-15  3

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_影片展示

参考网站:80s.tw/movie/list/-----

创建模型类(逆向生成)

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 %}

最新回复(0)