如何新建py_2.0 基础篇-新建项目

上篇我们介绍了搭建Django项目需要的基本环境配置,这篇将介绍新建一个简单的Django项目。

源码:ben-ying/django-toturial

Commit:init project 1.0, 2.0 · ben-ying/django-toturial@551c62e

git clone -b templates https://github.com/ben-ying/django-toturial.git

基本操作

1. 新建项目,有些关键字不能使用如django,test等。

django-admin startproject myproject

2. 创建完以后项目结构如下。

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py
  • myproject:根目录只是您的项目的容器,它的名字与Django无关。
  • manage.py:一个命令行实用程序,可让您以各种方式与此Django项目交互。
  • myproject/ __ init__.py:一个空文件,告诉Python这个目录应该被认为是一个Python包。
  • myproject/settings.py:这个是Django项目的设置, Django设置会告诉你有关设置如何工作的所有信息。
  • myproject/urls.py:这个Django项目的URL声明,包含你的Django项目所支持的网站的URL列表。
  • myproject/wsgi.py:WSGI兼容的Web服务器为你的项目提供服务的入口点。

3. 进入项目目录以后运行项目。

(venv) ben@ben-VirtualBox:~/app/myproject$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

May 15, 2018 - 06:54:18
Django version 2.0.5, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

4. 然后用网页打卡http://127.0.0.1:8000/就会出现如下界面。

8c656545e84bcba91c5034b6c75b3da8.png

5. 8000是默认端口,如果想用其他端口可以使用其他端口,如8080。

python manage.py runserver 8080

6. 如果你想让其他局域网内的其他电脑来访问这个网址,需要在端口前加ip地址或者0。

python manage.py runserver 0:8000

新建app

1. 新建app,一个project可以包含一个或多个app。

python manage.py startapp myapp

2. 新建完app后,app结构如下。

myapp/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

3. 新建myapp/urls.py并输入以下内容,path第一个参数表示路径,第二个参数表示对于哪个view,第三个表示name。

from django.urls import path
from . import views


urlpatterns = [
    path('', views.index, name='index'),
]

4. 在myproject/urls.py添加路径,将myapp/urls中的所有URL包含到myproject/urls.py中。

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


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

5. 在myapp/views.py添加如下代码。

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world!")

然后用网页打卡http://127.0.0.1:8000/myapp就会出现如下界面。

0dbbacb854de4c764b0c5a65e0322af4.png

创建数据库

1. 安装postgresql。

sudo apt-get install postgresql-9.6 postgresql-server-dev-9.6
# vi /etc/postgresql/9.6/main/pg_hba.conf
# (Change all authentication mechanisms from ident to md5)
sudo /etc/init.d/postgresql reload

2. 切换到postgresql的admin用户。

sudo su - postgres

3. 进入postgres。

psql

4. 创建数据库(myproject)。

CREATE DATABASE myproject;

5. 创建用户名(ben)和密码(123456)。

CREATE USER ben WITH PASSWORD '123456';

6. 给用户添加属性。

ALTER ROLE ben SET client_encoding TO 'utf8';
ALTER ROLE ben SET default_transaction_isolation TO 'read committed';
ALTER ROLE ben SET timezone TO 'UTC';

7. 给用户添加数据库操作权限。

GRANT ALL PRIVILEGES ON DATABASE myproject TO ben;

8. 给用户添加创建数据库的权限。

ALTER USER ben CREATEDB;

9. 退出postgres。

q 

10. 退出postgresql用户。

exit

11. 打开myproject/settings.py配置数据库并修改DATABASES。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'ben',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '',
    }
}

12. 安装psycopg2。

sudo apt-get install python-psycopg2
sudo pip install psycopg2

13. 创建数据库表。

(venv) ben@ben-VirtualBox:~/app/myproject$ python manage.py migrate 
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, 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 auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK 

添加models

1. 在打开myapp/models.py并添加models。

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
  • CharField, IntegerField, DateTimeField:数据类型
  • ForeignKey:外键
  • max_length:数据长度
  • on_delete=models.CASCADE:级联删除

2. 打开myproject/settings.py并添加配置类引用到INSTALLED_APPS中,这个路径由app(myapp)目录下的apps.py(apps)中的类名(MyappConfig)决定。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig',
]

3. 生成sql语句,生成的文件在myapp/migrations中,确切的语句由使用的数据库类型决定,我们使用的是Postgresql。

python manage.py makemigrations myapp

4. 将models添加的表添加到数据库中 。

python manage.py migrate

进入Django测试环境

1. 运行测试环境。

python manage.py shell

2. 在测试环境中运行。

>>> from polls.models import Choice, Question 

>>> Question.objects.all()
<QuerySet []>

>>> from django.utils import timezone

>>> q = Question(question_text="What's new?", pub_date=timezone.now())

>>> q.save()

>>> q.id
1

>>> q.question_text
"What's new?"

>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

3. object的显示由models.py中类的__str__方法决定,就像上面打印Question就显得不够直观,我们可以修改打印结果,修改myapp/models.py里面的内容。

from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

打印结果如下

>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

显示Admin页面

1. 创建Admin用户名和密码,输入用户名,邮箱和密码。

(venv) ben@ben-VirtualBox:~/app/myproject$ python manage.py createsuperuser
Username (leave blank to use 'ben'): 
Email address: benying1988@gmail.com
Password: 
Password (again): 
Superuser created successfully.

2. 在admin中显示model创建的表,打开myapp/admin.py并添加以下字段。

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


admin.site.register(Question)

admin.site.register(Choice)

3. 然后用网页打卡http://127.0.0.1:8000/admin就会出现如下界面。

0703046b125ec9d50ae953bab304f41e.png

4. 用刚才创建的账号和密码登入以后就能看到Choice和Question的数据了,点击进去就可以增删改查数据库中的内容了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值