Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Checklate
first_blog
提交
78e80597
F
first_blog
项目概览
Checklate
/
first_blog
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
first_blog
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
78e80597
编写于
12月 04, 2022
作者:
checklate
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
美化登录页
上级
06c688cb
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
81 addition
and
29 deletion
+81
-29
README.md
README.md
+3
-1
app/auth/forms.py
app/auth/forms.py
+4
-2
app/auth/views.py
app/auth/views.py
+0
-5
app/fake.py
app/fake.py
+35
-0
app/models.py
app/models.py
+6
-1
app/templates/auth/login.html
app/templates/auth/login.html
+15
-12
app/templates/base.html
app/templates/base.html
+17
-7
app/templates/index.html
app/templates/index.html
+1
-1
未找到文件。
README.md
浏览文件 @
78e80597
...
@@ -6,4 +6,6 @@
...
@@ -6,4 +6,6 @@
1、终端中设置环境变量
`$env:FLASK_APP = "flasky.py"`
1、终端中设置环境变量
`$env:FLASK_APP = "flasky.py"`
2、使用flask run启动
2、使用flask run启动
\ No newline at end of file
3、开启调试模式
`$env:FLASK_DEBUG=1 `
\ No newline at end of file
app/auth/forms.py
浏览文件 @
78e80597
...
@@ -15,12 +15,14 @@ from ..models import User
...
@@ -15,12 +15,14 @@ from ..models import User
class
RegistrationForm
(
FlaskForm
):
class
RegistrationForm
(
FlaskForm
):
username
=
StringField
(
'Username'
,
validators
=
[
username
=
StringField
(
'Username'
,
validators
=
[
DataRequired
(),
Length
(
1
,
64
),
DataRequired
(),
Length
(
1
,
64
),
Regexp
(
'^[A-Za-z][A-Za-z0-9_.]*$'
,
0
,
Regexp
(
'^[A-Za-z][A-Za-z0-9_.]*$'
,
0
,
'Usernames must have only letters, numbers, dots or '
'Usernames must have only letters, numbers, dots or '
'underscores'
)])
'underscores'
)])
password
=
PasswordField
(
'Password'
,
validators
=
[
password
=
PasswordField
(
'Password'
,
validators
=
[
DataRequired
(),
EqualTo
(
'password2'
,
message
=
'Passwords must match.'
)])
DataRequired
(),
EqualTo
(
'password2'
,
message
=
'Passwords must match.'
)])
password2
=
PasswordField
(
'Confirm password'
,
validators
=
[
DataRequired
()])
password2
=
PasswordField
(
'Confirm password'
,
validators
=
[
DataRequired
()])
submit
=
SubmitField
(
'Register'
)
submit
=
SubmitField
(
'Register'
)
...
...
app/auth/views.py
浏览文件 @
78e80597
...
@@ -55,8 +55,3 @@ def register():
...
@@ -55,8 +55,3 @@ def register():
def
before_request
():
def
before_request
():
if
current_user
.
is_authenticated
:
if
current_user
.
is_authenticated
:
current_user
.
ping
()
current_user
.
ping
()
# if not current_user.confirmed \
# and request.endpoint \
# and request.blueprint != 'auth' \
# and request.endpoint != 'static':
# return redirect(url_for('auth.unconfirmed'))
app/fake.py
0 → 100644
浏览文件 @
78e80597
from
random
import
randint
from
sqlalchemy.exc
import
IntegrityError
from
faker
import
Faker
from
.
import
db
from
.models
import
User
,
Post
def
users
(
count
=
100
):
fake
=
Faker
()
i
=
0
while
i
<
count
:
u
=
User
(
username
=
fake
.
user_name
(),
password
=
'password'
,
name
=
fake
.
name
(),
location
=
fake
.
city
(),
about_me
=
fake
.
text
(),
member_since
=
fake
.
past_date
())
db
.
session
.
add
(
u
)
try
:
db
.
session
.
commit
()
i
+=
1
except
IntegrityError
:
db
.
session
.
rollback
()
def
posts
(
count
=
100
):
fake
=
Faker
()
user_count
=
User
.
query
.
count
()
for
i
in
range
(
count
):
u
=
User
.
query
.
offset
(
randint
(
0
,
user_count
-
1
)).
first
()
p
=
Post
(
body
=
fake
.
text
(),
timestamp
=
fake
.
past_date
(),
author
=
u
)
db
.
session
.
add
(
p
)
db
.
session
.
commit
()
app/models.py
浏览文件 @
78e80597
...
@@ -37,7 +37,6 @@ class Permission:
...
@@ -37,7 +37,6 @@ class Permission:
ADMIN
=
16
ADMIN
=
16
class
Role
(
db
.
Model
):
class
Role
(
db
.
Model
):
__tablename__
=
'roles'
__tablename__
=
'roles'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
...
@@ -87,6 +86,7 @@ class Role(db.Model):
...
@@ -87,6 +86,7 @@ class Role(db.Model):
db
.
session
.
add
(
role
)
db
.
session
.
add
(
role
)
db
.
session
.
commit
()
db
.
session
.
commit
()
class
Post
(
db
.
Model
):
class
Post
(
db
.
Model
):
__tablename__
=
'posts'
__tablename__
=
'posts'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
...
@@ -124,6 +124,7 @@ class Post(db.Model):
...
@@ -124,6 +124,7 @@ class Post(db.Model):
raise
ValidationError
(
'post does not have a body'
)
raise
ValidationError
(
'post does not have a body'
)
return
Post
(
body
=
body
)
return
Post
(
body
=
body
)
class
Follow
(
db
.
Model
):
class
Follow
(
db
.
Model
):
__tablename__
=
'follows'
__tablename__
=
'follows'
follower_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'users.id'
),
follower_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'users.id'
),
...
@@ -132,6 +133,7 @@ class Follow(db.Model):
...
@@ -132,6 +133,7 @@ class Follow(db.Model):
primary_key
=
True
)
primary_key
=
True
)
timestamp
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
utcnow
)
timestamp
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
utcnow
)
class
User
(
UserMixin
,
db
.
Model
):
class
User
(
UserMixin
,
db
.
Model
):
__tablename__
=
'users'
__tablename__
=
'users'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
...
@@ -260,6 +262,7 @@ class AnonymousUser(AnonymousUserMixin):
...
@@ -260,6 +262,7 @@ class AnonymousUser(AnonymousUserMixin):
login_manager
.
anonymous_user
=
AnonymousUser
login_manager
.
anonymous_user
=
AnonymousUser
class
Comment
(
db
.
Model
):
class
Comment
(
db
.
Model
):
__tablename__
=
'comments'
__tablename__
=
'comments'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
...
@@ -278,6 +281,7 @@ class Comment(db.Model):
...
@@ -278,6 +281,7 @@ class Comment(db.Model):
markdown
(
value
,
output_format
=
'html'
),
markdown
(
value
,
output_format
=
'html'
),
tags
=
allowed_tags
,
strip
=
True
))
tags
=
allowed_tags
,
strip
=
True
))
db
.
event
.
listen
(
Comment
.
body
,
'set'
,
Comment
.
on_changed_body
)
db
.
event
.
listen
(
Comment
.
body
,
'set'
,
Comment
.
on_changed_body
)
...
@@ -285,4 +289,5 @@ db.event.listen(Comment.body, 'set', Comment.on_changed_body)
...
@@ -285,4 +289,5 @@ db.event.listen(Comment.body, 'set', Comment.on_changed_body)
def
load_user
(
user_id
):
def
load_user
(
user_id
):
return
User
.
query
.
get
(
int
(
user_id
))
return
User
.
query
.
get
(
int
(
user_id
))
db
.
event
.
listen
(
Post
.
body
,
'set'
,
Post
.
on_changed_body
)
db
.
event
.
listen
(
Post
.
body
,
'set'
,
Post
.
on_changed_body
)
app/templates/auth/login.html
浏览文件 @
78e80597
...
@@ -4,17 +4,20 @@
...
@@ -4,17 +4,20 @@
{% block title %}Flasky - Login{% endblock %}
{% block title %}Flasky - Login{% endblock %}
{% block page_content %}
{% block page_content %}
<div
class=
"page-header"
>
<h1>
Login
</h1>
</div>
<div
class=
"col-md-4"
>
{{ wtf.quick_form(form) }}
</div>
<p>
New user?
<a
href=
"{{ url_for('auth.register') }}"
>
Click here to register
</a>
</p>
<div
class=
"container"
>
<form
class=
"form-signin"
>
<h2
class=
"form-signin-heading"
>
Please Log in
</h2>
{{ wtf.form_field(form.username, class="form-control user-icon") }}
{{ wtf.form_field(form.password, class="form-control password-icon") }}
{{ wtf.form_field(form.remember_me) }}
{{ wtf.form_field(form.submit, class="btn btn-lg btn-primary btn-block") }}
<p>
New user?
<a
href=
"{{ url_for('auth.register') }}"
>
Click here to register
</a>
</p>
</form>
</div>
{% endblock %}
{% endblock %}
app/templates/base.html
浏览文件 @
78e80597
{% extends "bootstrap/base.html" %}
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block title %}First_Blog{% endblock %}
{% block head %}
{{ super() }}
<link
rel=
"shortcut icon"
href=
"{{ url_for('static', filename='favicon.ico') }}"
type=
"image/x-icon"
>
<link
rel=
"icon"
href=
"{{ url_for('static', filename='favicon.ico') }}"
type=
"image/x-icon"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"{{ url_for('static', filename='styles.css') }}"
>
{% endblock %}
{% block navbar %}
{% block navbar %}
<div
class=
"navbar navbar-
inverse
"
role=
"navigation"
>
<div
class=
"navbar navbar-
default
"
role=
"navigation"
>
<div
class=
"container"
>
<div
class=
"container"
>
<div
class=
"navbar-header"
>
<div
class=
"navbar-header"
>
<button
type=
"button"
class=
"navbar-toggle"
<button
type=
"button"
class=
"navbar-toggle"
...
@@ -13,11 +20,16 @@
...
@@ -13,11 +20,16 @@
<span
class=
"icon-bar"
></span>
<span
class=
"icon-bar"
></span>
<span
class=
"icon-bar"
></span>
<span
class=
"icon-bar"
></span>
</button>
</button>
<a
class=
"navbar-brand"
href=
"/"
>
F
lasky
</a>
<a
class=
"navbar-brand"
href=
"/"
>
F
irst_Blog
</a>
</div>
</div>
<form
class=
"navbar-form navbar-left"
role=
"search"
>
<div
class=
"form-group"
>
<input
type=
"text"
class=
"form-control"
placeholder=
"Search"
>
</div>
<button
type=
"submit"
class=
"btn btn-default"
><span
class=
"glyphicon glyphicon-search"
></span></button>
</form>
<div
class=
"navbar-collapse collapse"
>
<div
class=
"navbar-collapse collapse"
>
<ul
class=
"nav navbar-nav"
>
<ul
class=
"nav navbar-nav"
>
<li><a
href=
"/"
>
Home
</a></li>
{% if current_user.is_authenticated %}
{% if current_user.is_authenticated %}
<li>
<li>
<a
href=
"{{ url_for('main.user', username=current_user.username) }}"
>
<a
href=
"{{ url_for('main.user', username=current_user.username) }}"
>
...
@@ -26,13 +38,11 @@
...
@@ -26,13 +38,11 @@
</li>
</li>
{% endif %}
{% endif %}
</ul>
</ul>
<ul
class=
"nav navbar-nav navbar-right"
>
<ul
class=
"nav navbar-nav navbar-right"
>
{% if current_user.is_authenticated %}
{% if current_user.is_authenticated %}
<li><a
href=
"{{ url_for('auth.logout') }}"
>
Log Out
</a></li>
<li><a
href=
"{{ url_for('auth.logout') }}"
>
Log Out
</a></li>
{% else %}
{% else %}
<
li><a
href=
"{{ url_for('auth.login') }}"
>
Log In
</a></li
>
<
button
type=
"button"
class=
"btn btn-default navbar-btn"
><a
href=
"{{ url_for('auth.login') }}"
><span
class=
"glyphicon glyphicon-user"
></span>
Log In
</a></button
>
{% endif %}
{% endif %}
</ul>
</ul>
</div>
</div>
...
...
app/templates/index.html
浏览文件 @
78e80597
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
{% import "bootstrap/wtf.html" as wtf %}
{% import "bootstrap/wtf.html" as wtf %}
{% import "_macros.html" as macros %}
{% import "_macros.html" as macros %}
{% block title %}F
lasky
{% endblock %}
{% block title %}F
irst_Blog
{% endblock %}
{% block page_content %}
{% block page_content %}
<div
class=
"page-header"
>
<div
class=
"page-header"
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录