视频地址网站(不错哦,可惜更新速度太慢,值得一看):http://www.fanhuaxiu.com/
七、django结合boostrap(即使用静态文件)(0+6步)
zero:利用搜索引擎下载boostrap模板,解压缩,里面有js,css,html,images等文件;
以下参考官方教程步骤:首页》How-to guides 》Managing static files (e.g. images, JavaScript, CSS)
https://docs.djangoproject.com/en/1.10/howto/static-files/
first:Make sure that django.contrib.staticfiles is included in your INSTALLED_APPS.
second:In your settings file, define STATIC_URL, for example:
In your settings file, define STATIC_URL, for example:
STATIC_URL = '/static/'
其实一二步可以不管,因为django自动做好了。
third(这一步可以暂时跳过,到最后再做):将下载好的html文件中的代码做如下修改:
#在最开头引入
{% load static %}
#所有资源文件src都要修改
<img src="{% static "my_app/example.jpg" %}" alt="My image"/>
PS:如果想让django不止在默认APP的static文件中寻找静态文件,可以这么做: you can define a list of directories (STATICFILES_DIRS) in your settings file where Django will also look for static files. For example:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
]
forth:在APP目录下,(django默认在APP目录下)新建一个static文件夹,把除了.html文件的所有静态文件都放入static中,把.html文件放入templates文件夹中;
fifth:在urls.py文件中添加以下代码:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
sixth:可以考虑做第三步了,不过每个.html文件都要做第三步,太麻烦,做了很多重复的工作,所以考虑把基本模板抽离出来建成base.html,公共部分放在base.html中,然后使用继承模板的方式减少工作量;
base.html如下:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="{% static "my_app/style.css" %}" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
其他继承base.html的文件:
{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
八,up主解答粉丝问题,没有实质内容跳过;
九、自定义用户user对象的数据模型建立
官方链接:Home》Common Web application tools》Authentication》Customizing authentication
大多数网站都要建立user对象,django提供了两种方法,第一种用django自带的user对象(字段较少),当然也可以在此基础上进行添加字段;第二种方法:完全DIY,想要多少字段就用多少字段;
第一种django自带(大概有十个字段基础上,自己再添加新的字段):
官网链接:Home》Common Web application tools》Authentication》 API Reference
first:model.py中建立user模型:
#注意继承的类为AbstractUser
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
#自己添加的jifen字段
jifen=models.IntegerField('积分',default=0)
#以下为每个数据模型都有的
class Meta:
db_table='MyUser'#数据库表表名
def __str__(self):
return self.username #这里得返回字符串字段,不能用id,django规定
second:在settings.py中添加自定义的设置参数:
AUTH_USER_MODEL = 'myapp.MyUser'
third:更新数据库记录,同步数据库;
python manage.py makemigrations myapp
python manage.py migrate
此时就会发现MyUser表中除了django自带的10个字段还新增了jifen字段
第二种方法(完全DIY,包括用户认证等等)(三步):
first:model.py中建立user模型:
second:在settings.py中添加自定义的设置参数:
AUTH_USER_MODEL = 'myapp.MyUser'
from django.contrib.auth.models import AbstractBaseUser
class MyUser(AbstractBaseUser):
# 以下两个变量是必须提供
identifier = models.CharField(max_length=40, unique=True)
USERNAME_FIELD = 'identifier'
#自己添加的jifen字段
jifen=models.IntegerField('积分',default=0)
#以下为每个数据模型都有的
class Meta:
db_table='MyUser'#数据库表表名
def __str__(self):
return self.USERNAME_FIELD
second:在settings.py中添加自定义的设置参数:
AUTH_USER_MODEL = 'myapp.MyUser'
PS:注意自定义的user数据模型必须保证数据库中为空,即数据库中不能已经更新了django自带的user数据模型,这样会冲突,导致报错;所以:删除原来更新的数据库和数据库记录;重建一个全新的数据库;
third:更新数据库记录,同步数据库;
python manage.py makemigrations myapp
python manage.py migrate
PS:此时默认情况下MyUser表会有四个字段:id,password,last_login,identifier;之后你可以自己添加需要字段(第一步),再重复第三步即可,比如这里添加jifen=models.IntegerField(‘积分’,default=0)到第一步中