django使用

1、django报错"GET /static/plugins/bootstrap/css/bootstrap.css HTTP/1.1" 404 1718,

然后引用的Bootstrap一直不出来,页面中的静态资源无法加载,

报这个错的原因,是因为配置setting时候没有配置好。

后面在seeting里面添加下面这段就好了

STATICFILES_DIRS = ( 

os.path.join(BASE_DIR, "static"), 

 

2、Django中DATABASES配置

2.1Django默认使用SQLite,在settings.py文件中,通过DATABASES选项进行数据库配置

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "test",
"USER": "root",
"PASSWORD": "123456",
"HOST": "x.x.x.x",
"PORT" : "3306" ,
}
}
2.2需要安装python中mysql的库
pip install mysql

3、django中templates设置
配置
 
调用
 
 
4、django中static调用

 

 配置

 

 

调用

 

5、jquery使用注意的问题

 

 

 

 6、django中orm源sql如何查看?

 

 

 

In [1]: from django.contrib.auth.models import User
In [2]: User.objects.all()[0]Out[2]: <User: admin>
In [3]: from django.db import connection
In [4]: connection.queries
Out[4]:[{'sql': u'SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined` FROM `auth_user` LIMIT 1','time': '0.109'}]








 

7、如何查看数据迁移时,模型中的源sql?

7.1、在models中定义模型

class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name

class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name

class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField()
def __str__(self):
return self.headline

 


7.2、使用makemigrations、migrate进行数据迁移; sqlmigrate查看模型中的源sql : usermnge代表app名称, 0001代表makemigrations生成的版本文件0001_initial.py

manage.py@modelTest > sqlmigrate usermnge 0001
"D:\Program Files\PyCharm 2018.1.4\bin\runnerw.exe" "D:\Program Files\python3.6.7\python.exe" "D:\Program Files\PyCharm 2018.1.4\helpers\pycharm\django_manage.py" sqlmigrate usermnge 0001 D:/pythonWorkspace/modelTest
Tracking file by folder pattern: migrations
BEGIN;
--
-- Create model Author
--
CREATE TABLE `usermnge_author` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(200) NOT NULL, `email` varchar(254) NOT NULL);
--
-- Create model Blog
--
CREATE TABLE `usermnge_blog` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL, `tagline` longtext NOT NULL);
--
-- Create model Entry
--

CREATE TABLE `usermnge_entry` (
`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
`headline` VARCHAR (255) NOT NULL,
`body_text` LONGTEXT NOT NULL,
`pub_date` date NOT NULL,
`mod_date` date NOT NULL,
`n_comments` INTEGER NOT NULL,
`n_pingbacks` INTEGER NOT NULL,
`rating` INTEGER NOT NULL,
`blog_id` INTEGER NOT NULL
);

CREATE TABLE `usermnge_entry_authors` (
`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
`entry_id` INTEGER NOT NULL,
`author_id` INTEGER NOT NULL
);

ALTER TABLE `usermnge_entry` ADD CONSTRAINT `usermnge_entry_blog_id_034b0324_fk_usermnge_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `usermnge_blog` (`id`);

ALTER TABLE `usermnge_entry_authors` ADD CONSTRAINT `usermnge_entry_authors_entry_id_9c526204_fk_usermnge_entry_id` FOREIGN KEY (`entry_id`) REFERENCES `usermnge_entry` (`id`);

ALTER TABLE `usermnge_entry_authors` ADD CONSTRAINT `usermnge_entry_authors_author_id_1491bafd_fk_usermnge_author_id` FOREIGN KEY (`author_id`) REFERENCES `usermnge_author` (`id`);

ALTER TABLE `usermnge_entry_authors` ADD CONSTRAINT `usermnge_entry_authors_entry_id_author_id_7b6463ae_uniq` UNIQUE (`entry_id`, `author_id`);

COMMIT;

Process finished with exit code 0

manage.py@modelTest >

 

 

8、模型表中OneToOneField的源sql?

class Student(models.Model):
name = models.CharField(max_length=50)

class Achieve(models.Model):
mark = models.FloatField()
student = models.OneToOneField(to=Student, on_delete=models.CASCADE)

 

 

执行makemigrations后,产生0002_achieve_student.py, 在manage.py console中查看0002_achieve_student.py对应的源sql
manage.py@modelTest > sqlmigrate usermnge 0002
"D:\Program Files\PyCharm 2018.1.4\bin\runnerw.exe" "D:\Program Files\python3.6.7\python.exe" "D:\Program Files\PyCharm 2018.1.4\helpers\pycharm\django_manage.py" sqlmigrate usermnge 0002 D:/pythonWorkspace/modelTest
Tracking file by folder pattern: migrations
BEGIN;
--
-- Create model Student
--
CREATE TABLE `usermnge_student` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL);
--
-- Create model Achieve
--

CREATE TABLE `usermnge_achieve` (
`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
`mark` DOUBLE PRECISION NOT NULL,
`student_id` INTEGER NOT NULL UNIQUE
);

ALTER TABLE `usermnge_achieve` ADD CONSTRAINT `usermnge_achieve_student_id_8d012c32_fk_usermnge_student_id` FOREIGN KEY (`student_id`) REFERENCES `usermnge_student` (`id`);

COMMIT;

Process finished with exit code 0

 

 

9.两个表,多对多的相互查询?

模型如下:

class Person(models.Model):
name = models.CharField(max_length=128)

def __str__(self):
return self.name

class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')

def __str__(self):
return self.name

class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)

视图如下:

def test1(request):

ringo = Person.objects.create(name="Ringo Starr")
print(connection.queries)

paul = Person.objects.create(name="Paul McCartney")
print(connection.queries)

beatles = Group.objects.create(name="The Beatles")
print(connection.queries)

m1 = Membership(person=ringo, group=beatles, date_joined=date(1962, 8, 16), invite_reason="Needed a new drummer.")
m1.save()
print(connection.queries)


qst1 = beatles.members.all()
# print(connection.queries)
print(qst1.query)

qst2 = ringo.group_set.all()
# print(connection.queries)
print(qst2.query)

return HttpResponse("ok test1 21")

执行结果如下:

[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.001'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
{'sql': "INSERT INTO `usermnge_person` (`name`) VALUES ('Ringo Starr')", 'time': '0.005'},
{'sql': "INSERT INTO `usermnge_person` (`name`) VALUES ('Paul McCartney')", 'time': '0.002'},
{'sql': "INSERT INTO `usermnge_group` (`name`) VALUES ('The Beatles')", 'time': '0.007'},
{'sql': "INSERT INTO `usermnge_membership` (`person_id`, `group_id`, `date_joined`, `invite_reason`) VALUES (3, 2, '1962-08-16', 'Needed a new drummer.')", 'time': '0.008'}]
[12/Sep/2019 16:17:22] "GET /test1/ HTTP/1.1" 200 10

SELECT
`usermnge_person`.`id`,
`usermnge_person`.`name`
FROM
`usermnge_person`
INNER JOIN `usermnge_membership` ON (
`usermnge_person`.`id` = `usermnge_membership`.`person_id`
)
WHERE
`usermnge_membership`.`group_id` = 15

 

SELECT
`usermnge_group`.`id`,
`usermnge_group`.`name`
FROM
`usermnge_group`
INNER JOIN `usermnge_membership` ON (
`usermnge_group`.`id` = `usermnge_membership`.`group_id`
)
WHERE
`usermnge_membership`.`person_id` = 29

 

10、命令行创建数据库注意事项?

CREATE TABLE `grade` (
`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` VARCHAR(255) NOT NULL
);

CREATE TABLE `student` (
`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
`g_id` INTEGER NOT NULL REFERENCES `grade` (`id`),
`name` VARCHAR(255) NOT NULL
);


10.1、使用倒引号`, 不能使用单引号' ;
10.2、varchar(255),用括号括起来,不能错误写成varchar 255;
10.3、REFERENCES `grade` (`id`), 不能错误写成 FOREIGN KEY (`g_id`) REFERENCES `grade` (`id`);

 

 

11、三个表互为关联,是否会形成死循环?

11.1、总结下来是:
用户-用户组-角色, 用户可以通过用户组与角色建立关联; 用户-角色,用户和角色也可以直接建立关联;
    

 

 

但是 ,需要注意唯一性:
“用户、角色”这个一对要唯一;
‘’用户、用户组“要唯一;
”角色、用户组“要唯一。


11.2、三张表不能互为关联,否则相互为外键,删除的时候相互依赖,形成死循环,无法删除;

 

 

12、为什么80%的码农都做不了架构师?

各位大牛,小弟这几天搞用户 权限控制的功能,在网上看了个关于用户权限控制的设计:

基于RBAC权限模型的扩展模型的完整设计图:(不知道哪位看过没有),有些不明白的地方,希望能得到大家的指点:

现在的设计应该是:一个用户拥有若干角色,每一个角色拥有若干权限,这样构成用户拥有某些权限,但是权限和菜单怎么关联呢?比如说我现在有以下功能模块:

1、添加用户信息    2、删除用户信息、 3、删除用户信息,现在有角色1:管理员,我怎样让这个管理员用户这三个功能的权限能,现在的思路是:

1、根据用户从 "用户角色表" 里面查询所拥有的 角色ID ,

2、根据 角色ID从 ”角色权限关联表“查询这个角色拥有的权限ID,

3、然后根据权限ID从权限关联表中查询所拥有的菜单功能模块,

但是权限表和菜单表具体在表里面是怎么体现的,我怎样吧这几个功能菜单给某个权限呢?

 

13 MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用


CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录

SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)

NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

RESTRICT
同no action, 都是立即检查外键约束

SET NULL
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

 

 

 

posted on 2019-08-09 11:14  芦苇草鱼  阅读(303)  评论(0编辑  收藏  举报