Python_Django项目学习

1.安装python3
yum -y install python3

使用python虚拟环境
python3 -m venv /opt/lzkj
source /opt/lzkj/bin/activate //进入python虚拟环境
deactivate //退出虚拟环境

2.安装django
source /opt/lzkj/bin/activate
pip install Django
安装包 插件包
pip install pycparser
pip install asn1crypto
pip install cffi
pip install cryptography
pip install idna
pip install PyMySQL
pip install pytz
pip install six

安装可视化包,以后要用 (一般都有安装了,只是更新)
pip install Cycler
pip install kiwisolver
pip install matplotlib
pip install numpy
pip install pyparsing
pip install python-dateutil
pip install setuptools
pip install six
pip install numpy
pip install Pillow
pip install wordcloud
pip install sqlalchemy

python -m django --version

3.检测是否安装成功
python3

import
django.get_version( ) //或django.version

4.创建项目
django-admin startproject /home/lzkj
cd /home/lzkj

[root@test lzkj]# tree
.
├── manage.py //管理 Django 项目的命令行工具 用于管理(创建APP,创建数据库、管理员)
└── lzkj // 目录包含你的项目
├── asgi.py // 作为你的项目的运行在 ASGI 兼容的Web服务器上的入口
├── init.py //一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包
├── settings.py //Django 项目的配置文件
├── urls.py //路由系统URLConfig 、程序入口
└── wsgi.py //作为你的项目的运行在 WSGI 用于部署项目到Web服务器

Django默认只允许本机访问、英文环境,这些均可在setting.py中进行修改
ALLOWED_HOST = “*” //允许所有IP登录

LANGUAGE_CODE = ‘zh-Hans’ //设置为中文
TIME_ZONE = ‘Asia/Shanghai’ //设置为亚洲上海

5.简易服务器测试是否成功
python manage.py runserver //默认端口 8000 可更改

想要向网络上的其它电脑展示你的成果时),使用:
python manage.py runserver 0:8000 //0 是 0.0.0.0 的简写


                                                                              **

2.创建投票应用

**


1.创建投票系统项目
python3 manage.py startapp polls
cd polls

有以下目录
[root@test polls]# tree
.
├── admin.py
├── apps.py
├── init.py
├── migrations
│ └── init.py
├── models.py
├── tests.py
└── views.p


2.编写第一个视图
vim views.py

from django.shortcuts import render
from django.http import HttpResponse
def index(request):
        return HttpResponse("Hello, world. You're at the polls index.")

3.我们需要将一个 URL 映射到它——这就是我们需要 URLconf
为了创建 URLconf,请在 polls 目录里新建一个 urls.py 文件

vim urls.py

from django.urls import path
from . import views
urlpatterns = [
path(’’, views.index, name=‘index’),
]


4.在项目 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:
[root@test mysite]# ls
db.sqlite3 manage.py mysite polls

from django.contrib import admin
from django.urls import include, path
          
 urlpatterns = [
                        path('polls/', include('polls.urls')),
                        path('admin/', admin.site.urls),
                                ]

函数 include() 允许引用其它 URLconfs
何时使用 include() 当包括其它 URL 模式时你应该总是使用 include()


5.测试是否成功
python manage.py runserver 0:80

访问 http://localhost:8000/polls/


3.建立数据库配置

1.数据库配置
通常这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。
Python 内置 SQLite,你可能更倾向使用一个更具扩展性的数据库,例如 PostgreSQL

查看 /home/mysite/mysite/settings.py
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’, //默认使用是sqlite3
‘NAME’: BASE_DIR / ‘db.sqlite3’,
}
}

ENGINE – 可选值有 ‘django.db.backends.sqlite3’,
‘django.db.backends.postgresql’,
‘django.db.backends.mysql’,
或 ‘django.db.backends.oracle’

本次实验 :使用MySQL8.0
1.安装MySQL
2.更改密码,创建库,授权登录

alter user root@“localhost” identified by “123qqq…A”;
create user lzkj@"%" identified by “123qqq…A”;
create database lzkj charset utf8;
grant all privileges on lzkj.* to lzkj@% with grant option;

3.修改/home/mysite/mysite/settings.py //修改数据库和时间模块
数据库配置可以参照https://docs.djangoproject.com/en/3.1/ref/settings/#databases

vim /home/mysite/mysite/settings.py

DATABASES = {
   
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',             //使用MySQL 
        'NAME': 'lzkj',                                //库名
        'USER': 'lzkj',
        'PASSWORD': '123qqq...A',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

LANGUAGE_CODE = 'zh-hans'        //修改为中文,可不改
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

4.配置django 使用pymysql模块 /home/mysite/mysite/_init.py
vim /home/mysite/mysite/_init.py
import pymysql
pymysql.install_as_MySQLdb()

补充 INSTALLED_APPS 默认包含Django自带应用;
django.contrib.admin – 管理员站点, 你很快就会使用它。
django.contrib.auth – 认证授权系统。
django.contrib.contenttypes – 内容类型框架。
django.contrib.sessions – 会话框架。
django.contrib.messages – 消息框架。
django.contrib.staticfiles – 管理静态文件的框架。

4.创建数据库中创建一些表
yum install python3-devel mysql-devel gcc-c++ gcc make
pip install mysqlclient

python manage.py runserver //检测能否成功启动 经常应版本不满足需要更新mysqlclient 。直接修改PY脚本即可
python manage.py migrate //这个命令检查 INSTALLED_APPS 设置,取决于你的 /home/mysite/mysite/settings.py

5.创建管理账号
python manage.py createsuperuser
admin

6.访问后台
python manage.py runserver 0:8000
访问 http://localhost:8000/admin


4.创建投票系统


1.创建一个投票app
数据 2张表
question > 记录问题
choice > 记录每个问题的选项,以及该选项所得的票数
URL 所有的投票应用,网址都以 http://127.0.0.1/polls 开头
http://127.0.0.1/polls > 投票首页,列出所有的问题
http://127.0.0.1/polls/1/ 1号问题的详情页
http://127.0.0.1/polls/1/result/ > 1号问题投票的结果页

执行命令
python mange.py startapp polls

(test) [root@django polls]# tree
.
├── admin.py
├── apps.py
├── init.py
├── migrations
│ └── init.py
├── models.py
├── tests.py
└── views.py


2.授权,将以http://127.0.0.1 /polls /开头的url 都交给 polls 应用处理
修改 mysite/url.py
方法一 :

from django.contrib import admin
from django.urls import url,include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'polls/',include('polls.urls')),  
]

或修改为
方法二:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/',include('polls.urls')),
]

3.在polls应用下创建 urls.py
from django.conf.urls import url

urlpatterns = [

]


4.创建投票首页

创建URL,指定使用哪个视图函数进行处理
vim polls/urls.py

from django.conf.urls import url
from . import views        #使用相对导入的方式,在当前目录中导入的模块   

**#在http://X.X.X./polls/ 后面开始匹配** 
urlpatterns = [
        #首页用views.index函数处理,为这个url起个名字叫index
        url(r'^$',views.index,name='index')
        ]

5.编写视图函数
vim polls/views.py mkdir polls/template

from django.shortcuts import render
  
def index(request):        #用户访问web发来的请求将作为参数request的值
   return  render(request,"index.html")

6.创建模板(HTML网页)
创建polls/templates/ 目录
mkdir polls/template
vim index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>投票首页</title>
</head>
<body>
<h1>投票首页</h1>
<hr>
<ul>
	<li>投票问题1</li>
	<li>投票问题2</li>
</ul>
</body>
</html>

7.创建投票详情页
(1).配置polls/URL.PY
在url.PY加入
url(r’\d+/$’,views.detail,name=‘detail’)
(2).编写视图函数
vim polls/view.py
def detail(request):
return render(request,“detail.html”)

(3).编写投票详情
vim templates/detail.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>投票详情</title>
</head>
<body>
<h1>详情</h1>
<hr>
这个是详情
</ul>
</body>
</html>

进一步完善 投票详情页

**1.**修改URL,把问题编号作为参数传递给函数
polls/url.py
url(r’(^(?P<question_id>\d+)/$’,views.detail,name=‘detail’)

2.修改视图函数,函数接受参数,并将参数传递给模板
polls/views.py

def detail(request,question_id):
return render(request,“detail.html”,{‘question_id’:question_id})

**3.**修改模板文件
polls/templates/detail.html

这个第{ { question_id }}详情 //{ { }} 双括号里面传函数

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>投票详情</title>
</head>
<body>
<h1>详情</h1>
<hr>
这个第{
  { question_id }}详情
</ul>
</body>
</html>

结果页
1.url
url(r’(^(?P<question_id>\d+)/result/$’,views.detail,name=‘detail’)
**2.**views.py

def detail(request,question_id):
return render(request,“result.html”,{‘question_id’:question_id})

3.result.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>投票结果</title>
</head>
<body>
<h1>结果</h1>
<hr>
这个第{
  { question_id }}结果
</ul>
</body>
</html>


创建model

8.创建模型Model

1.创建模型
vim polls/models.py

from django.db import models
  
class   Question(models.Model):
    question_text = models.CharField(max_length=100)
    pub_date = models.DateTimeField()
    
    def __str__(self):
        return self.question_text
    
class Choice(models.Model):
    choice_text = models.CharField(max_length=100)
    votes = models.IntegerField(default = 0)
    q = models.ForeignKey(Question,on_delete=models.CASCADE)
    
    def __str__(self):
        return "%s: %s" %(self.choice_text,self.q)


2.生成数据库中的表
python manage.py makemigrations
python manage.py migrate

数据库中的表名结构是 :应用名__类名
每张表都会自动生成名为id 的主键字段,每个类变量成为表中的一个字段
外键字段的名字是 :类变量名__id


3.修改外键名字
Pycharm修改 >选择要修改的双击 按shift+F6
vim polls/models.py

from django.db import models

 Create your models here.
class Question(models.Model):
    question_txt = models.CharField(max_length=100)
    pub_date = models.DateTimeField()

    def __str__(self):
        return self.question_text

class Choice(models.Model):
    choice_text = models.CharField(max_length=100)
    votes = models.IntegerField(default = 0)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)

    def __str__(self):
        return "%s: %s" %(self.choice_text,self.question)

4.将模型注册到后台管理界面
(1)修改polls/admin.py

from django.contrib import admin
from .models import Question,Choice

admin.site.register(Question)
admin.site.register(Choice)

(2)在后台界面查看

https://yiyibooks.cn //参考文案


6.Python API

接上一次目录内容
Python API

1. 激活环境 source /opt/project/bin/activate
cd /home/mysite

2.进入项目目录 ,运行 Python manage.py shell

from polls.models import Question,Choice

3.每个模型默认都有一个管理器,叫object ,用来对数据增删改查
4.查看所有的Question 实例**

Question.objects.all()


5.添加新的问题
(1.) 通过

from django.utils import timezone 或 from datetime import datetime
q1 = Question(question_text = “春节有什么计划?”,pub_date = “timezone.now()”)
q1.save()

(2) 通过objects管理创建 //不用.save保存

q2 = Question.object.create(
question_text=“test is ok” ,pub_date = timezone.now()
)

q5 = Question.objects.create(question_text=“test is ok?”,pub_date=datetime.now())


6.添加新的选项
(1)通过新建实例的方式

c1 = Choice(choice_text=“加班”,question=q5)
c1.save()

(2)通过objects管理创建

c1 =Choice.objects.create(choice_text=“ok”,question=q5)

(3)通过问题直接创建选项。具体的问题比如是q5,因为Choice 类有外键,那么问题就有多个选项,
q5也有一个管理器叫choice_set ,如果选项的类名是C ,那么q5的管理器就叫c_set.这个管理器对应的就是该问题所有的选项。

q5.choice_set.create(choice_text="test is no ")


7. 通过get 查询,get要求只能返回一个结果,这个结果是一个实例

(1)通过主键查询

Question.objects.get(pk=1)
(2)通过ID 查询

Question.objects.get(id= 2) //id =2 是id__exact=2 的简写
(3)通过其他字段查询

Question.objects.get(question_text=“test is ok?”)
(4)如果返回的结果是多项,将出现异常

Question.objects.get(id__gte=2) //id >=2
(5)如果查不到,也会抛出异常

Question.objects.get(id__exact=8)

**注:**双下划线是属性,python常用的取出属性是句点表示,如 对象.属性 ;在django的条件里,属性都是使用双下划线
astr = “你计划到哪个城市找工作?”
astr.startswich(“你计划”)
Question.objects.get(question_text_startswich=‘你计划’)
astr.endswith(‘工作?’)
Question.object.get(question_text_endswith=“工作?”)


8.获得排序的结果 order_by
order_by 返回的结果是很多对象构成的集合
(1)通过pub_date 进行排序,默认升序

Question.objects.order_by(“pub_date”)
(2)以降序的方式排列

Question.objects.order_by("-pub_date")
(3)查看对应的SQL

r1=Question.objects.order_by(“pub_date”)
print(r1.query)
(4)获得最新的一个问题 。降序的第一个实例,或升序的最后一个实例,注意查询集不支持

Question.objects.order_by("-pub_date")[0]
r1[len(r1)-1]


9.条件过滤

Question.objects.filter(pub_date__year=2020)
Question.objects.filter(pub_date__year=2020).filter(pub_date__month=9).filter(pub_date__day=28) //过滤年月日
r4 = Question.objects.filter(pub_date__year=2020).filter(pub_date__month=9)
print(r4.query)


10.修改和删除:首先找到对应的实例,修改就是属性重新赋值

q1 = Question.objects.get(question_text=“nihao”)
q1.question_text= “new_nihao”
q1.save()

c1 = Choice.objects.get(choice_text=“test is no”)
c1.delete()


7.完成首页

1.修改视图函数,使之真正在数据库中取得所有的问题
vim polls/views.py

from django.shortcuts import render
from .models import Question

def index(request):        #用户访问web发来的请求将作为参数request的值
    questions = Question.objects.order_by("-pub_date")
    return  render(request,"index.html",{
   "questions":questions})

2.在模板中显示所有的问题
vim polls/templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>投票首页</title>
</head>
<body>
    <h1>投票首页</h1>
    <hr>
{
  { questions }}
</body>
</html>

3.修改模板语言修改 index.html
模板语言中,变量使用{ { var }} 格式,其他标签使用 { { % % }} ,在{ { % % }}中,变量不需要用双花括号

注:forloop.counter是循环的计数 {% for %}开始 {% endfor%}结束
vim polls/templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>投票首页</title>
</head>
<body>
<h1>投票首页</h1>
<hr>
{% for question in questions %}
    <p>
        {
  { forloop.counter}}.{
  { question.question_text }} {
  { question.pub_date}}
    </p>
{% endfor %}
<!--#{
   { questions }}}-->
</body>
</html>

4.为问题添加超链接
vim polls/tempates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>投票首页</title>
</head>
<body>
<h1>投票首页</h1>
<hr>
{% for question in questions %}
    <p>
        {
  { forloop.counter}}.
        <!--    <a href="/polls/{
   {question.id}}/">{
   {question.question_text}}</a> 不推荐 -->           
        <a href="{% url "detail" question_id=question.id %}">{
  {question.question_text}}</a>   推荐这个方法  
        {
  { question.pub_date}}
    </p>
{% endfor %}
<!--#{
   { questions }}}-->
</body>
</html>

完成详情页
(1).修改视图函数,
vim polls/views.py

def detail(request,question_id):
question = Question.objects.get(id=question_id)
return render(request,“detail.html”,{‘question’:question})

**(2).**修改模板文件,显示问题及其选项
vim polls/templates/details.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>投票详情</title>
</head>
<body>
<h1>详情</h1>
<hr>
<h2>
{
  { question.question_text }}
<ul>
    {% for choice in question.choice_set.all %}    //question.choice_set.all 在页面中不可以代括号  
    <li>
        {
  { choice.choice_text}}
    </li>
    {%endfor%}
</ul>
</h2>
</body>
</html>

**(3)**修改投票详情页,创建form表单
1、当用户投票是,将投票的数据发送到http://127.0.0.1/polls/1/vote/
vim polls/urls.py

url(r’^(?P<question_id>\d+)/vote/$’,views.vote,name=‘vote’),

2、http://127.0.0.1/polls/1/vote对应成一个函数。该函数可以将相应选项的票数加1

3.修改投票详情页,将上一步的ul改写为表单
vim polls/templates/details.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>投票详情</title>
</head>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值