django基础使用

django文件作用

urls.py
网址入口,关联到对应的views.py文件的一个函数,访问网址对应一个函数。

views.py
处理用户发出的请求,从urls.py中对应过来,通过templates中的网页可以将显示内容(比如登陆的用户名,用户请求数据,输出)到网页。

models.py
与数据库操作相关,存入或者读取数据时会用。

forms.py
表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框生成等工作。

templates文件夹
views.py中的函数渲染templates中的html模板,得到动态内容的网页,也可以使用缓存来提高速度。

admin.py
后台,可以用很少量的代码就拥有一个强大的后台。

settings.py
Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。

配置虚拟环境

虚拟环境(venv)是pythin多版本管理,可以使得每个项目环境与其他项目独立起来,保持环境干净,解决报之间的冲突。

新建我们我们项目的文件夹,进入文件夹,开始配置venv的命令,其中env为虚拟环境的放置目录;
在这里插入图片描述
创建完成之后,输入env\Scripts\activate.bat进入虚拟环境:
在这里插入图片描述
表示已经成功进入虚拟环境

安装django 2.1版本
在这里插入图片描述
表示安装成功,安装完成开始创建工程项目

创建工程

django-admin startproject project 

创建app

在django中一个app代表一个功能模块。将不通的功能放在不通的模块中,方便代码的复用以及管理。进入创建的project的目录下

python manage.py  startapp myapp

注册app(激活app)

在project工程下的settings.py文件修改如下:

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

django的模型(ORM)

django连接mysql数据库
每一个模型都映射一个数据库表,包含存储的数据的重要字段和行为
每个模型都是一个 Python 的类,这些类继承 django.db.models.Model

模型相当于数据库中数据表
对象相当于数据表中的行
属性相当于数据表的字段

django默认使用sqlite为数据库,我们使用mysql作为数据库,前提需要安装pymysql(python3支持)

django不能创建数据库,需要自己手动去创建数据库。如果确定使用该模型(数据库),需要在工程项目下的settings.py文件修改如下:用于连接数据库

DATABASES = {
    'default': {
        #将sqlite数据库改成mysql数据库
        'ENGINE': 'django.db.backends.mysql', 
        #需要操作的数据库名(提前创建好的)
        'NAME': 'databasename',
        #用于连接数据库的用户
        'USER': 'username',
        #连接数据库用户的密码
        'PASSWORD': 'password',
        #连接数据库的主机ip
        'HOST': '主机ip',
        #数据库的端口号
        'PORT': '3306',
    }
}

然后在工程下__init__.py文件添加:

import pymysql
#主要作用告诉django使用pymysql代替mysqldb
pymysql.install_as_MySQLdb()

在应用下创建模型
在myapp项目的modles.py文件添加内容
定义students的数据表,字段Name,sex,age,contend

class Students(models.Model):
    name = models.CharField(max_length=20)
    sex = models.BooleanField(default=True)
    age = models.IntegerField()
    contend = models.CharField(max_length=30)

模型的字段
模型中每一个字段都应该是相应类的实例, Django 利用这些字段类来实现下面这些功能:
字段类型用以指定数据库数据类型
默认的HTML表单输入框</ref/forms/widgets>
用于Django admin和自动生成表单的基本验证

默认情况下, Django 会给每一个模型添加下面的字段:一个自增的主键,每个模型都需要拥有一个设置了 primary_key=True 的字段。

id = models.AutoField(primary_key=True)
  • primary_key=True
    如果设置为 True ,将该字段设置为该模型的主键。
  • unll
    如果设置为 True , 当该字段为空时,Django会将数据库中该字段设置为 NULL 。默认为 False。
  • blank
    如果设置为 True ,该字段允许为空。默认为 False 。
    注意该选项与 False 不同, null 选项仅仅是数据库层面的设置,然而 blank 是涉及表单验证方面。如果一个字段设置为 blank=True ,在进行表单验证时,接收的数据该字段值允许为空,而设置为 blank=False 时,不允许为空
  • unique
    如果设置为 True,这个字段必须在整个表中保持值唯一。
  • default
    该字段的默认值。可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象
  • choices
    该参数接收一个可迭代的列表或元组(基本单位为二元组)。如果指定了该参数,在实例化该模型时,该字段只能取选项列表中的值。

生成迁移文件

在project的工程目录下

E:\PycharmProjects\myword>python manage.py makemigrations
Migrations for 'myapp':
  myapp\migrations\0001_initial.py
    - Create model Students

执行迁移文件

E:\PycharmProjects\myword>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myapp, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying myapp.0001_initial... OK
  Applying sessions.0001_initial... OK

数据库查看是否生成student的表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| dedecmsv           |
| django             |
| information_schema |
| jeecg              |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
mysql> use django;
mysql> show tables;
+----------------------------+
| Tables_in_django           |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| myapp_students             |
+----------------------------+
mysql> desc myapp_students;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20) | NO   |     | NULL    |                |
| sex     | tinyint(1)  | NO   |     | NULL    |                |
| age     | int(11)     | NO   |     | NULL    |                |
| contend | varchar(30) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

ORM模型操作mysql数据库

删除数据表
将应用下的modles.py文件的函数注释,再次执行迁移文件并且执行迁移文件,查看数据库的表已经删除
修改数据表
将应用下的modles.py文件的类的属性修改,再次执行迁移文件并且执行迁移文件,查看数据库的表已经删除
pycharm连接数据库
在这里插入图片描述
在这里插入图片描述
自动下载安装驱动:
在这里插入图片描述
安装完成填写上面数据库连接的主机,用户密码等等;完成后点击test连接,出现成功表示测试成功;
在这里插入图片描述
表示连接成功;

启动项目

E:\PycharmProjects\myword>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
April 16, 2019 - 21:48:21
Django version 1.11.11, using settings 'myword.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

浏览器测试:127.0.0.1:8000(本机运行)
在这里插入图片描述

创建视图

在myapp项目的views.py文件修改

from django.http import HttpResponse

def index(request):
    return HttpResponse('hello world!')

设置路由

在project项目的urls.py文件修改

from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^',include('myapp/urls'))
]

在myapp项目创建urls.py文件,并且修改

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$',views.index),
]

浏览器访问:127.0.0.1:8000
在这里插入图片描述

创建模板

在project工程的settings.py文件配置模板目录

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',
            ],
        },
    },
]

在project的工程下创建templates的模板目录,可以在模板目录下为每个项目创建项目模板目录,为myapp项目模板创建index模板,修改如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
   <h1>hello world!</h1>
</body>
</html>

在对myapp项目的views.py文件修改

def index(request):
    #return HttpResponse('hello world!')
    return render(request,'myapp/index.html')

浏览器访问:127.0.0.1:8000
在这里插入图片描述

实践时各种坑

最近看python编程从入门到实践,对于django后面的简单教程,下来自己实际动手操作一遍,加深对于django的模式理解。下面是在操作过程中遇见的问题:

第一个报错

TypeError: 'set' object is not reversible

在这里插入图片描述
网上基本就是在urls.py文件中urlpatters是[]列表格式被自己写成{}字典格式,将字典修改为列表即可

第二个报错
第二个错误是在视图中已经从数据库得到自己想要的数据,然而在第二步将数据填充到字典时,因为自己将字典的key值搞错了,导致后期再模板中显示不到数据。
在这里插入图片描述
在这里插入图片描述
浏览器显示:
在这里插入图片描述
找到原因后将字典的topic修改成topics然后就可以正常显示
在这里插入图片描述
第三个错误

NoReverseMatch at /new_entry/1/
Reverse for 'topic' with arguments '('',)' not found. 1 pattern(s) tried: ['topics/(?P<topic_id>\\d+)/$']

模板的代码如下:

{% block content %}

    <p><a href="{% url 'learning:topics' topic_id %}" >{{ topic }}</a></p>

    <p>添加新的条目:</p>
    <form action="{% url 'learning:topic' topic_id %}"  method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">完成</button>
    </form>

{% endblock content %}

提示反响解析错误,报错时很懵不知道自己错在什么地方,网上查询了很多资料,出错原因有很多种,

问题可能在topic_id没有取到值,(在实际中也将topic_id修改为数字,然后可以访问了,但是添加的条目都是在定义好的的id值中)但是从下面可以已经取到正确值
在这里插入图片描述
但是在前端页面展示出现问题,后面可能问题出在{% url ‘learning:topic’ topic_id %}中 topic_id展示前端页面。(索性将url全部删除竟然可以正常访问,而且条目可以正常添加),这种方法不知道存不存在问题,后面做完整个教程在看看

{% block content %}

    <p><a >{{ topic }}</a></p>

    <p>添加新的条目:</p>
    <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">完成</button>
    </form>

{% endblock content %}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值