unimportant formatting commit (just trailing whitespace)
Move global variables to top of file

You're doing something somewhat unusual here, refering to global
variables in your functions that don't exist at function declaration
time. Because function bodies don't get evaluated until they're called
this works fine, but it scares me to use global variables in my
functions that don't yet have values.
Purify functions and make argument passing explicit

Two separate issues:

Modifying global variables inside functions: I much prefer "pure"
functions, which don't depend on outside state. If you're using a class,
I think it's reasonable to do the kinds of global variable modifications
you do in get_next_player (if you did though, I'd call it
"set_next_player" instead, since although it's returning the current
player, the main point of it was to modify the global variable
current_player

Referencing variables from outer scopes:
Most of the changes here are changing functions to explicitly pass
variables from outer scopes into their function bodies instead of
expecting them to exist. This makes the functions more reusable since
we've explicitly defined the contract we have with the function.
Again, in a class I think this makes more sense, since you wouldn't
expect to be able to use a method outside without the associated object,
but then it's more explicit.
less code in win detection without being very clever

You could do something cooler than this, but even if we're just checking
each win position, it's better to write less repetive, error-prone code.
python ternary operator

You may have seen this in obj c,
x = y ? 2 : 3

you could just take this function out and inline this code instead, but
having the function is nice and clear
move import to the top of file

Having an import in a function is frowned upon, for two reasons I can
think of:
You'll get inconsistent performance: the first call may be slow if the
import hashn't already happened somewhere else in your program
It's harder to see dependencies of the file at a glance
Reuse "other player" function

Now that we're being explicit about our parameters, we can reuse
functions more.
No need to create variable ahead of time

Since both execution paths assign something to board_marker, there's no
need to assign it to an empty string at first
dictionaries are nice for things like this
this is already a boolean (True or False)
style, but I think these are simple enough to inline
list comprehension
instance methods instead of class methods