Django 高级编程之 Hello World

1. 创建项目

在这里插入图片描述

2. 创建 app

  1. Tools -> Run manage.py Task -> 输入 startapp message,message为 app名
  2. 在项目上新建四个目录,apps, log, media, static
  3. 将 Message 文件夹移到 apps中
  4. 将 apps 目录设置 mark as Sources root
  5. settings.py 文件中添加:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps',
]

3. 配置数据库

3.1 安装 MySQL 驱动

如果安装 pymysql:

  1. 在 PyCharm 的 Terminal 中,pip install pymysql
  2. 在子级目录的__init__.py 中添加:
    import pymysql
    pymysql.install_as_MySQLdb()

如果安装 mysqlclient:

  1. pip install mysqlclient
  2. 在 /usr/local/lib 目录中,ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib libmysqlclient.21.dylib
  3. 不需要修改 init.py
  4. pymysql 是一个纯 python 的包,比mysqlclient更慢,故建议安装 mysqlclient

3.2 配置数据库信息

  1. 在settings.py 文件中添加:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdjango',
        'USER': 'root',
        'PASSWORD': '***',
        'HOST': '127.0.0.1'
    }
}

3.3 创建实体类

在models.py 文件中创建UserMessage类,类似 Java 中创建的 ORM 框架:

class UserMessage(models.Model):
    name = models.CharField(max_length=20, verbose_name=u'用户名')
    email = models.EmailField(verbose_name=u'邮箱')
    address = models.CharField(max_length=100, verbose_name=u'联系地址')
    message = models.CharField(max_length=500, verbose_name=u'留言地址')

    class Meta:
        verbose_name = u'用户留言信息'
        # 如果没有指定 verbose_name_plural 字段,那么就会在 verbose_name 字段信息的后面加一个 s
        # 如果指定了,就会显示自定的信息
        verbose_name_plural = verbose_name

        # db_table = 'user_message'
        # 按这个字段倒序排列
        # ordering = '-object_id'

4. 配置静态文件

4.1 配置样式等文件

  1. 新建 static 文件夹,并将静态文件按照目录放到这个文件夹中,HTML 文件中也需要修改对应的路径
  2. settings.py 文件中添加:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

4.2 配置 HTML 文件

  1. 将 HTML 文件放到 template 文件夹下
  2. 配置 settings.py 文件,修改 TEMPLATE 的 DIRS 字段为:
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',
            ],
        },
    },
]
  1. 注意点:HTML 文件中的各种连接都建议使用/开头,比如一个链接写成 href=’/link1’,而不要写成href=‘link1’,这样做的好处是:使用绝对路径,而不是使用相对路径,相对路径在多次相对之后就会让人产生混乱。通常开发中,都建议设置一个 BASE 绝对路径,其他路径都是基于此设置路径,但是也是使用绝对路径方式,不要使用…/…/这种方式。

5. 生成数据表等初始化操作

  1. Tools -> Run manage.py Task -> 输入 makemigrations 和 migrate

6. 启动

  1. Run -> Run ‘helloworld’ 或者 debug

7. 新建一个 form 表单

  1. form 表单中添加:{% csrf_token %}
  2. url.py 中添加 action 对应的请求路径,通常都是使用正则表达式进行匹配,一个 action 一个匹配太冗余。配置匹配时,正则表达式需要加^ 和 $ 符号。
from apps.views import DemoView

from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', TemplateView.as_view(template_name='index.html')),
    url(r'^index/$', TemplateView.as_view(template_name='index.html')),
    # 注意需要加^ 和 $ 符号,分别对应开始和结束,这里非常重要,配置不好会出现 URL 串联
    url(r'^demo/$', DemoView.as_view(), name='demo_form'),
]
  1. 在 apps 的 views.py文件中新建DemoView类,新建demo_form方法
def demo_form(request):
    if request.method == 'POST':
        name = request.POST.get('name', '')
        message = request.POST.get('message', '')
        address = request.POST.get('address', '')
        email = request.POST.get('email', '')

        user_message = UserMessage()
        user_message.name = name
        user_message.message = message
        user_message.address = address
        user_message.email = email
        user_message.save()

	# 返回的message_form.html页面中便会有my_message对象,可以通过my_message.name去除name 字段值
    return render(request, 'message_form.html', {
        'my_message': message
    })

8. 注意点

  1. 有的时候,CSS 等静态文件会被浏览器缓存,导致样式不对。比如同时调试两个项目,而访问两个项目的地址都是127.0.0.1:8000,静态文件都是 style.css,此时就会出现样式串联的现象,误以为 Django 的 static 目录配置有问题,此时只要清空浏览器的缓存即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值